使用复合设计模式时的Unity-NullReferenceException

时间:2018-07-11 15:54:11

标签: c# unity3d nullreferenceexception composite

因此,我试图以复合设计模式的形式制作一个简单的对话框树,其中层次结构的每个成员都具有基本相同的可自定义属性,在这种情况下,是一个问题和两个选项。在Unity中,我试图将问题分配给文本框,并将每个选项分配给按钮。单击按钮时,您将转到树的另一级或叶子。无论出于何种原因,我都得到了null引用异常错误及其指向这一行的信息。我会尽力回答任何其他问题。

Y

这可能是我可以解决的简单问题,但我不确定现在应该在哪里寻找。如果有人能在正确的方向上帮助我,我将非常感谢。谢谢。这是我的复合模式关卡脚本。

RowID

Initializer脚本

11

1 个答案:

答案 0 :(得分:1)

我认为它看起来很简单。

您正在创建Class类的新实例,但不要设置TextButton属性。

这部分也是多余的,因为您要告诉它查找自身的引用! (“文本框”的类型为Text

Textbox.GetComponent<Text>()....

要修复空引用,可以将字段设置为静态。

public static Text Textbox;
public static Text Button1;
public static Text Button2;

然后从其他位置分配它们。也许是带有公共字段的初始化脚本?您可以做很多不同的事情。 这是将脚本添加到空游戏对象,然后将文本框/按钮拖到检查器插槽中的示例:

public class Initializer : MonoBehaviour
{
   public Text Textbox;
   public Button Button1;
   public Button Button2;

 // Awake is called before Start, so Start() in your Composite script will be called 
 // after these fields have been initialized
   void Awake() 
   {
      Level.Textbox = this.Textbox;
      Level.Button1 = this.Button1;
      Level.Button2 = this.Button2;
   }
}

最终删除这些注释行,它们的作用完全相同。

    // Textbox.GetComponent<Text>().text = question;
    Textbox.text = question;
    Button1.GetComponent<Text>().text = optionA;
    // Button1.text = optionA;
    Button2.GetComponent<Text>().text = optionB;
    // Button2.text = optionA;