所以我将一个项目升级到另一个。
在第一个项目中,预制件已经在现场,我手动在其上设置所有组件和脚本。
在第二个中,预制件是在运行时通过脚本创建的,我必须通过脚本添加所有内容。
直到获得公开清单的脚本之前,我并没有什么麻烦。代码运行时,每次调用列表时都会给我一个空引用。
因此,在经过反复试验和错误之后,我发现,不仅要声明该列表(无论是公共列表,还是其他),我都必须实例化它(公共列表,无论=新列表)。
我很高兴找到解决方案,但我不理解,这困扰着我。为什么我必须在第二个项目中创建一个新列表?
答案 0 :(得分:1)
声明列表意味着您创建的类具有列表,但默认情况下仍然没有值。为了使列表可用,您必须通过分配= new List<Data>
来创建它的实例。
答案 1 :(得分:1)
当您在Unity编辑器中手动向游戏对象添加脚本时,Unity会将该公共列表初始化为空列表。然后它将序列化该空列表。实例化手动创建的预制件时,它已经包含了编辑器序列化的空列表。
答案 2 :(得分:0)
说您有图片(参考)或在您的地方(实例)之间的区别是这样想的。可以说列表不是列表,它只是一个整数。
我可以说
int i;
并且我有一个引用,但是引用为空,即它没有值。
但是如果我说
int i = 0;
它现在具有价值,没有零,我无法对i
进行操作,因为计算机不知道如何处理它。...
从根本上说List<Item> list;
而不是列表列表= new List<Item>()
表示您已经声明了该变量,并在内存中分配了空间,但是在您赋值之前,它什么都没有。希望这会有所帮助。
您不能在C#中使用未初始化的变量。您可以使用其类型的默认值初始化变量。您还可以使用类型的默认值来指定方法的可选参数的默认值。