如何将字符串的内容分配给Unity 4.6中的文本字段?

时间:2014-10-27 21:17:08

标签: text unity3d

我正在开发一个从网站导入文本数据的C#类。这很好用。在我丢失它的地方是如何在字符串变量中包含所有文本后在Unity 4.6中显示文本。任何建议都表示赞赏。

3 个答案:

答案 0 :(得分:4)

Unity 4.6 UI系统具有名为Text的组件。您可以观看视频教程here。另外,我建议您查看API

与往常一样,您有两种方法可以将此组件添加到游戏对象中。您可以从编辑器中执行此操作(只需单击要在层次结构中包含此组件的游戏对象并添加Text组件)。或者您可以使用gameObject.AddComponent<Text>()从脚本执行此操作。

如果您还不熟悉组件,建议您阅读此article

无论如何,在您的脚本中,您需要在其顶部添加using UnityEngine.UI;,因为Text类位于UnityEngine.UI命名空间中。好的,现在回到脚本,它将设置Text组件的值。

首先,您需要引用Text组件的变量。可以通过将其公开给编辑器来完成:

public class MyClass : MonoBehaviour {
    public Text myText;
    public void SetText(string text) {
        myText.text = text;
    }
}

在编辑器中将带有文本组件的gameObject附加到此值。

另一种选择:

public class MyClass : MonoBehaviour {
    public void SetText(string text) {
        // you can try to get this component
        var myText = gameObject.GetComponent<Text>();
        // but it can be null, so you might want to add it
        if (myText == null) {
            myText = gameObject.AddComponent<Text>();
        }
        myText.text = text;
    }
}

以前的脚本不是一个好例子,因为GetComponent实际上很贵。所以你可能想要缓存它的引用:

public class MyClass : MonoBehaviour {
    Text myText;
    public void SetText(string text) {
        if (myText == null) {
            // looks like we need to get it or add
            myText = gameObject.GetComponent<Text>();
            // and again it can be null
            if (myText == null) {
                myText = gameObject.AddComponent<Text>();
            }    
        }
        // now we can set the value
        myText.text = text;
    }
}
顺便说一下,'GetComponent或Add如果它还不存在'的模式是如此常见,通常在Unity中你想要定义函数

static public class MethodExtensionForMonoBehaviourTransform {
    static public T GetOrAddComponent<T> (this Component child) where T: Component {
        T result = child.GetComponent<T>();
        if (result == null) {
            result = child.gameObject.AddComponent<T>();
        }
        return result;
    }
}

所以你可以用它作为:

public class MyClass : MonoBehaviour {
    Text myText;
    public void SetText(string text) {
        if (myText == null) {
            // looks like we need to get it or add
            myText = gameObject.GetOrAddComponent<Text>();
        }
        // now we can set the value
        myText.text = text;
    }
}

答案 1 :(得分:2)

确保导入ui库 - using UnityEngine.UI

gameObject.GetComponent<Text>().text - 将.text替换为UI文本的任何其他字段

答案 2 :(得分:0)

我认为问题是创建动态大小的&#34;文本框&#34;而不是仅仅将字符串分配给GUIText GameObject。 (如果不是 - 只需将GUIText GameObject放入场景中,通过脚本中的GUIText变量访问它,并在Start或Update中使用myGUIText.text = myString。)

如果我的假设是正确的,那么我认为你应该只使用GUI标签:

http://docs.unity3d.com/ScriptReference/GUI.Label.html

如果您需要将字符串拆分为将文本放入不同的标签或GUITexts,则需要使用substrings