2017-02-16 34 views
3

我不知道爲什麼我的腳本在統一c#中總是得到空?Array.FindIndex總是在統一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#測試這裏測試它:https://csharppad.com/

它工作在它返回10

但在統一的C#編輯器是不同的總是返回-1。

有人可以解釋發生了什麼?

感謝

丹尼斯

+0

如何簡單地嘗試x == 16而不是x.equals(16)? –

+3

我沒有看太多你的代碼,但你的數組變量是公開的,這使得unity在檢查器中序列化它。檢查員對該字段的任何值都將覆蓋您設置的代碼值。所以我猜測這個數組在檢查器中沒有值或者沒有代碼中的值。 「-1」值意味着它不存在於列表中。 – Maakep

+0

@PiotrKamoda它是一樣的並返回-1。弗雷德裏克我猜你在這裏有點兒不對。我終於找到了答案。這不是關於序列化。但是它將重置檢查員的價值。或重新附加腳本。所以所有數組值的大小都會更新。當你說督察的價值時,我得到了這個。我檢查它,並且右邊的值16不在那裏。 –

回答

0

你的陣列是公開的,所以它是由統一序列化。 Unity會將數組設置爲您在檢查器中給出的值,覆蓋您在代碼中聲明的值。如果您不需要從檢查員訪問數組,則應該使用[NonSerialized]屬性。如果您確實需要從檢查員那裏訪問它,您還應該從那裏進行編輯。

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。

感謝