【问题标题】:How to Pin Text to a GameObject如何将文本固定到游戏对象
【发布时间】:2016-07-25 09:28:30
【问题描述】:

是否可以将文本对象统一固定到特定的游戏对象?我想做的是创建一个运行时游戏对象并将文本固定到该游戏对象上。我不知道如何创建它,因为我是 Unity 游戏开发的初学者。

// Code for Game Objects.. 
#pragma strict

// Variable for Get Components
var getComponents : GameObject; 

// For Moving the Box
var speed : float = 10f;
var movementVector = Vector3.zero;

function Start() {
    // Run Time Cube Generator
    for ( i = 0 ; i <= 5 ; i++ )
    {
        if(flag) {
            cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
            cube.name = "RedCube" + Tagcounter;

            cube.AddComponent(GUIText);

            // Render Cubes 
            cube.transform.position = Vector2(posx,posy); 
            cube.transform.localScale = Vector2(1,1);       
            cube.renderer.material.color = Color.red;
            //  cube.AddComponent(Rigidbody);
            //  cube.AddComponent(GUIText);
            cube.transform.Translate(0f,1f * Time.deltaTime,0f); 
            posy+=2;

            cube.gameObject.guiText.text = counter.ToString();  

            cube.gameObject.guiText.material.color = Color.white;

            //  cube.guiText.text = Vector3.forward(posx,posy,0);

            counter++;

            // Text Working
            Debug.Log(cube.gameObject.guiText.text);
        }

        Tagcounter++;
    }
}

function Update()
{
    var Redcube = GameObject.Find("RedCube0");
    var Redcube1 = GameObject.Find("RedCube1");
    var Redcube2 = GameObject.Find("RedCube2");
    var Redcube3 = GameObject.Find("RedCube3");
    var Redcube4 = GameObject.Find("RedCube4");
    var Redcube5 = GameObject.Find("RedCube5");

    // For Upward Movement 
    if(Input.GetKey(KeyCode.UpArrow)) {
        // For Moving Upward
        Redcube.transform.Translate(0f,1f * Time.deltaTime,0f);   
        Redcube1.transform.Translate(0f,1f * Time.deltaTime,0f);   
        Redcube2.transform.Translate(0f,1f * Time.deltaTime,0f);   
        Redcube3.transform.Translate(0f,1f * Time.deltaTime,0f);   
        Redcube4.transform.Translate(0f,1f * Time.deltaTime,0f);   
        Redcube5.transform.Translate(0f,1f * Time.deltaTime,0f);                  
    }

    // For Downward Movement
    if( Input.GetKey(KeyCode.DownArrow)) {      
        // For Moving Downwards
        Redcube.transform.Translate(0f,-1f * Time.deltaTime,0f);     
        Redcube1.transform.Translate(0f,-1f * Time.deltaTime,0f);     
        Redcube2.transform.Translate(0f,-1f * Time.deltaTime,0f);     
        Redcube3.transform.Translate(0f,-1f * Time.deltaTime,0f);     
        Redcube4.transform.Translate(0f,-1f * Time.deltaTime,0f);     
        Redcube5.transform.Translate(0f,-1f * Time.deltaTime,0f);           
    }

    // For Left Movement
    if( Input.GetKey(KeyCode.S)) {      
        // IF one moves Left 
        cube.transform.Translate(-1f * Time.deltaTime,0f,0f);     

        // Others Move Up First 
        Redcube.transform.Translate(0f,1f * Time.deltaTime,0f);   
        Redcube1.transform.Translate(0f,1f * Time.deltaTime,0f);   
        Redcube2.transform.Translate(0f,1f * Time.deltaTime,0f);   
        Redcube3.transform.Translate(0f,1f * Time.deltaTime,0f);   
        Redcube4.transform.Translate(0f,1f * Time.deltaTime,0f);   
        Redcube5.transform.Translate(0f,1f * Time.deltaTime,0f);                  
    }

    // For Right Movement
    if( Input.GetKey(KeyCode.D)) {      
        cube.transform.Translate(1f * Time.deltaTime,0f,0f);  
        // Others Move Up First 
        Redcube.transform.Translate(1f * Time.deltaTime,0f,0f);   
        Redcube1.transform.Translate(1f * Time.deltaTime,0f,0f);   
        Redcube2.transform.Translate(1f * Time.deltaTime,0f,0f);   
        Redcube3.transform.Translate(1f * Time.deltaTime,0f,0f);   
        Redcube4.transform.Translate(1f * Time.deltaTime,0f,0f);   
        Redcube5.transform.Translate(1f * Time.deltaTime,0f,0f);                          
    }   
}

function OnGUI() { 
    // Whole Screen     
    GUI.Box (Rect (0,0,100,50), "Top-left");
    GUI.Box (Rect (Screen.width - 100,0,100,50), "Top-right");
    GUI.Box (Rect (0,Screen.height - 50,100,50), "Bottom-left");
    GUI.Box (Rect (Screen.width - 100,Screen.height - 50,100,50), "Bottom-right");
    // Label 
}

【问题讨论】:

    标签: user-interface unity3d unityscript


    【解决方案1】:

    如果您希望文本对象直接附加到您的游戏对象,您可以使用

    var text = gameObjectName.AddComponent<TextMesh>();
    text.text = "Some text";
    

    我不确定 MeshRenderer 是否标记为 textMesh 的必需组件。如果不是,您还必须手动添加 MeshRenderer。 稍微复杂一点,但更好的做法是创建仅包含文本的子对象并将其公开在父对象中。像这样:

    var cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
    var textHolder = new GameObject("Text");
    textHolder.transform.parent = cube.transform;
    var text = textHolderAddComponent<TextMesh>();
    

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-24
      相关资源
      最近更新 更多