Unity3d 统一:按空格键时更改UI.Canvas.Text.Text
类ChangeText是UI.Canvas.Text的子类:Unity3d 统一:按空格键时更改UI.Canvas.Text.Text,unity3d,reference,null,instantiation,Unity3d,Reference,Null,Instantiation,类ChangeText是UI.Canvas.Text的子类: using UnityEngine; using UnityEngine.UI; public class ChangeText : MonoBehaviour { Text Instruction; // Use this for initialization void Start () { Instruction = GetComponent<Text>(); Debug.Lo
using UnityEngine;
using UnityEngine.UI;
public class ChangeText : MonoBehaviour {
Text Instruction;
// Use this for initialization
void Start () {
Instruction = GetComponent<Text>();
Debug.Log("Instruction: " + Instruction.text);
}
// Update is called once per frame
void Update () {
}
public void ChangeTheInstruction(string inst)
{
Instruction.text = inst;
Debug.Log("Instruction is now: " + Instruction.text);
}
}
我从CT对象得到一个NullReferenceException,因为CT没有实例化,但我不能在MonoBehavior上使用“new”。如何正确执行此操作?将
CT
声明为public(或在其上方添加[SerializeField]
标记),然后在inspector中拖放包含ChangeText
组件的游戏对象
public class SpacePress : MonoBehaviour
{
[SerializeField]
private ChangeText CT; // Drag & drop in the inspector
}
另一个解决方案(不太建议)是保持CT
私有,并使用GetComponent
或Find
函数之一检索它:
public class SpacePress : MonoBehaviour
{
private ChangeText CT;
// Use this for initialization
void Start ()
{
CT = FindObjectOfType<ChangeText>();
// OR
// CT = GameObject.Find("NameOfTheObjectHoldingCT").GetComponent<ChangeText>();
}
}
公共类SpacePress:MonoBehavior
{
私有文本CT;
//用于初始化
无效开始()
{
CT=FindObjectOfType();
//或
//CT=GameObject.Find(“name of objectholdingct”).GetComponent();
}
}
HI,我使用了:CT=GameObject.Find(“Text”).GetComponent();在start()方法中,因为ChangeText()已作为Canvas.Text的组件添加完毕。但在更改文本之前,我仍然会遇到一个NullReference错误。我可以解决这个一次性错误吗?GameObject.Find
将检索名为Text
的游戏对象。问题是,您可能检索到错误的游戏对象。重命名游戏对象,使其具有唯一的名称。但我强烈建议你选择第一个解决方案。我想选择第一个解决方案。但我要把什么拖给检查员?脚本已经在Text对象下了。正如我所说,您必须在SpacePress
脚本中放置ChangeText
实例的公共/序列化引用。然后,在SpacePress
的检查器的CT
字段中拖放包含ChangeText
脚本的对象。
public class SpacePress : MonoBehaviour
{
private ChangeText CT;
// Use this for initialization
void Start ()
{
CT = FindObjectOfType<ChangeText>();
// OR
// CT = GameObject.Find("NameOfTheObjectHoldingCT").GetComponent<ChangeText>();
}
}