如何获取TextMeshPro组件

har*_*han 7 c# unity-game-engine

public class ClickBub : MonoBehaviour {
int x;
int count;
TextMeshPro mytext;
TextMeshPro soretext;
GameObject textobj;
// Use this for initialization
void Start () {
    textobj = this.gameObject.transform.GetChild (0).gameObject;
    mytext = textobj.GetComponent<TextMeshPro>();
Run Code Online (Sandbox Code Playgroud)

在这个 mytext 中是一个空值。我如何将 TextMeshValue 分配给变量?

还说统一引擎无法转换类型。

小智 9

好吧,问题是TextMeshPro文本不是TextMeshPro对象,而是TMP_Text,所以如果您尝试这样做:

TMP_Text mytext;
void Start () {
    mytext = textobj.GetComponent<TMP_Text>();
}
Run Code Online (Sandbox Code Playgroud)

现在您应该在mytext对象中获得一个值。


Bas*_*oud 3

当你这样做时

textobj.GetComponent<TextMeshPro>();
Run Code Online (Sandbox Code Playgroud)

TextMeshProUnity将在对象中寻找组件textobj。根据您的代码,textobj是具有脚本的对象的第一个子对象ClickBub。您应该首先检查第一个子组件在编辑器中是否有 TextMeshPro 组件。为了确保您访问所需的元素,您可以尝试打印它们的名称:

void Start () 
{
    textobj = this.gameObject.transform.GetChild (0).gameObject;
    Debug.Log(textobj.name);
}
Run Code Online (Sandbox Code Playgroud)

是你期待的对象吗?

然后,如果一切都设置正确,但您想添加TextMeshPro 组件(如果没有),您可以这样做

void Start () 
{
    textobj = this.gameObject.transform.GetChild (0).gameObject;
    mytext = textobj.GetComponent<TextMeshPro>();
    if(mytext == null)
    {
        mytext = textobj.AddComponent<TextMeshPro>();
    }
}
Run Code Online (Sandbox Code Playgroud)