Array.FindIndex总是在单位C#

时间:2017-02-16 08:18:24

标签: c# unity3d

我不知道为什么我在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。

有人可以解释发生了什么吗?

由于

丹尼斯

2 个答案:

答案 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。

由于