在我的脚本的开头,我有这样一行。
Color[] oldColor;
后来我想用元素来填充它,所以我写了一个函数。
for (int i = 0; i < targets.Length; i++)
oldColor[i] = targets[i].color;
然而,第一行用绿色划线,它说我不能分配一个值,除非它的默认值(是null).另外,当我在Unity中运行它时,for循环下面的那行(它应该把值从一个数组复制到另一个数组)给我NullReferenceException.
'target'被定义为
SpriteRenderer[] targets;
它的所有元素都是通过检查员分配的。
我不明白发生了什么。为什么它不分配变量?
在向数组中添加元素之前,你必须先初始化一个数组并设置它的大小。
Color[] oldColor = new Color[10]; // just an example - use whatever size is appropriate
然后你可以设置它的元素。
一个更灵活的解决方案(如果你事先不知道大小)是使用 List
来代替。
List<Color> oldColor = new List<Color>();
for(...)
{
oldColor.Add(targets[i].color);
}
用linq你可以直接把target.color的值复制到oldColor,没有数组大小的问题。
using System.Linq;
:
:
Color[] oldColor = targets.Select(s => s.color).ToArray();