更改另一个类中引用的文本字段的值会导致错误

时间:2017-01-09 21:59:37

标签: c# unity3d

我正在尝试更改另一个类中的文本字段的值但我不断收到错误

  

对象引用未设置为对象的实例

第一堂课:

using UnityEngine;
using System.Collections;

public class Class1 : MonoBehaviour {

Class2 class2;

private void Start()
  {
    class2 = new Class2();
    class2.setText();
  }
}

第二课:

using UnityEngine;
using UnityEngine.UI;
using System.Collections;

public class Class2 : MonoBehaviour {

public Text txt;

public void setText()
  {
    txt.text = "Sample text";
  }
}

问题是我不知道如何在方法中使'txt'可见,就像函数忽略它在第二类中被声明一样。

以下是Class2脚本组件的编辑器属性:

Text connected to script in unity Objects Hierarchy

2 个答案:

答案 0 :(得分:0)

您收到此错误,因为在您的代码中,您从未向Class2实例分配Text GameObject,除此之外,您不应该像这样实例化MonoBehaviours(请参阅Serlite的评论)。

答案 1 :(得分:0)

这里的主要问题是您尝试使用Class2来获取对现有GameObject的引用,但您正在使用class2 = new Class2()来获取它。这不会为您提供所需的引用,并且new关键字与MonoBehaviour类一起使用几乎总会导致令人费解的错误,因为这不是它们被设计为实例化的方式。

在这种情况下,您甚至不想使用Class2实例化对象 - 场景中已有一个对象!您似乎已经知道如何在Unity编辑器中将引用拖动到公共字段 - 只需将您的class2字段公开,然后以相同的方式将“GameObjectText”对象拖到它上面:

public class Class1 : MonoBehaviour {

    public Class2 class2; // Drag onto this field in the editor

    private void Start()
    {
        class2.setText();
    }
}

希望这有帮助!如果您有任何问题,请告诉我。