【问题标题】:Reference canvas prefab textfields参考画布预制文本字段
【发布时间】:2017-12-16 20:13:50
【问题描述】:

我有一个名为 ScoreMenu 的画布预制件,我以编程方式对其进行实例化。

GameObject scoreMenu = (GameObject)Instantiate(Resources.Load("Prefabs/Menus/ScoreMenu"));

在我的画布中,我有几个文本字段和按钮。我无法引用这些文本字段,因此我可以更改它的内容。 我的画布有一个带有Text 类型的公共score 变量的脚本。如果它是ScoreMenu 类型,我可以参考。但实例化对象的类型为GameObject。所以我远远无法成功地将它转换为另一种类型,所以我可以做类似scoreMenu.score.text = "203"; 这样的事情 我不断收到 nullreference 错误或转换错误。引用画布预制件的子对象的正确方法是什么?

更新二:

我已经缩小了问题范围。

    GameObject scores = Instantiate(Resources.Load("Prefabs/Menus/ScoreMenu")) as GameObject; 
    ScoreMenu scoresMenu = scores.GetComponent<ScoreMenu>();    

这似乎是实例化和引用预制件的正确方法。 然而,问题在于我的预制类中的变量。 在我的班级中,我可以引用和更改Textobject。但是,当我尝试在课堂外执行此操作时,会出现空引用错误。

public class ScoreMenu : MonoBehaviour {

    public Text numStrokes;


    void OnAwake () {


    }

    void Start () {
        numStrokes = GameObject.Find("Strokes").GetComponent<Text>();
        numStrokes.text = "0000"; // this works
    }

    public void test () {

        print (numStrokes.text); // when calling this method from outside the class I get nullreference error

    }

【问题讨论】:

    标签: c# unity3d


    【解决方案1】:

    找到了,我想。 我不得不将 texfield 对象从层次结构中拖到检查器中的公共变量字段中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-13
      • 1970-01-01
      • 2010-09-05
      • 1970-01-01
      • 2017-09-04
      • 2022-01-02
      相关资源
      最近更新 更多