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对象中获得一个值。
当你这样做时
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)