我不知道为什么我在Unity下面的脚本c#总是为空?
public class WeatherControl : MonoBehaviour {
public GameObject Rain;
public int[] RainTime = new int[]{6,7,8,9,10,18,19,20,21,22,16};
int day;
System.DateTime dates;
// Use this for initialization
void Start () {
dates = System.DateTime.UtcNow;
day = (int) dates.Day;
//day = 16;
Debug.Log ("DAY : " + day);
int posRain = System.Array.FindIndex (RainTime, x => x.Equals(16));
Debug.Log ("POS RAIN : " + posRain);
if (posRain >= 0) {
Rain.SetActive (true);
} else {
Rain.SetActive (false);
}
}
}
我的变量 int posRain 总是返回-1 即使在数组中也有值包含它。变量日包含16.我手动输入并输入16。但总是返回-1。 我不知道为什么。
我也试过这个:
int posRain = System.Array.IndexOf (RainTime, day);
这也总是返回-1。
我在网上测试了C#Tester:https://csharppad.com/
它在返回10时起作用。
但是在Unity c#编辑器中它总是不同的,总是返回-1。
有人可以解释发生了什么吗?
由于
丹尼斯
答案 0 :(得分:1)
您的阵列是公开的,因此它由Unity序列化。 Unity会将数组设置为您在检查器中为其指定的值,从而覆盖您在代码中声明的值。如果您不需要从检查器访问该阵列,则应使用[NonSerialized]
属性。如果您确实需要从检查器访问它,您还应该从那里进行编辑。
答案 1 :(得分:0)
终于得到了答案......
最后这是我们应该记住的一件小事。有时这会让我们陷入困境。
在脚本中更新数组值。不要忘记在检查器中重置或重新附加包含数组值的脚本。重置或重新附加脚本时,所有值数组大小都将更新。
例如:
在脚本中你有一个数组:public int[] RainTime = new int[]{6,7,8,9,10,18,19,20,21,22};
这不包括数组中的16。现在,您在编辑器中运行代码。 在检查器中,您将看到数组大小包含所有RainTime数组值的值。
现在回到脚本更新数组值:
public int[] RainTime = new int[]{6,7,8,9,10,18,19,20,21,22,**16**};
你在最后一个数组中放了16个。现在在编辑器中运行代码。并且在检查器数组大小值中看到,即使您已通过脚本更新它,值16也不包含在检查器中的数组中。
您应该如何重置检查器中的值或从检查器重新附加脚本。它将更新值,现在检查器中的数组现在也包含值16。
由于