因此,我试图以复合设计模式的形式制作一个简单的对话框树,其中层次结构的每个成员都具有基本相同的可自定义属性,在这种情况下,是一个问题和两个选项。在Unity中,我试图将问题分配给文本框,并将每个选项分配给按钮。单击按钮时,您将转到树的另一级或叶子。无论出于何种原因,我都得到了null引用异常错误及其指向这一行的信息。我会尽力回答任何其他问题。
Y
这可能是我可以解决的简单问题,但我不确定现在应该在哪里寻找。如果有人能在正确的方向上帮助我,我将非常感谢。谢谢。这是我的复合模式关卡脚本。
RowID
Initializer脚本
11
答案 0 :(得分:1)
我认为它看起来很简单。
您正在创建Class类的新实例,但不要设置Text
和Button
属性。
这部分也是多余的,因为您要告诉它查找自身的引用! (“文本框”的类型为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;