public Vector3[] poss = new Vector3[] { new Vector3(1f, 2f, 3f), new Vector3(12f, 2f, 1f) };
如上,在unity3D使用的時候有時候需要使用到數組,如上所示的數組定義和實例化在C#中都沒有問題,但是在unity中調用的時候有時就會發生邊界溢出的錯誤!
而且無論怎么查都沒辦法!
后來聽說只有 public 的情況下才會出現這樣的情況,我試了下改為 Private 果然又不報錯了!
后來和群里一些小伙伴討論下
保險點的方式如下:
public Vector3[] poss; // Use this for initialization void Start () { //mAni = objWithAimation.GetComponent<Animation>(); poss = new Vector3[] { new Vector3(1f, 2f, 3f), new Vector3(12f, 2f, 1f) }; Debug.Log("___"+poss[0]); }
先定義,然后實例化!
如果知道原因的朋友可以告訴我為什么哈!
后來和大家討論下可能因為Inspector面板要獲取public變量的值,所以要在inspector面板設定,但是inspector面板應該是可以獲取到第一次實例化變量的值才對!所以這個說法還有待討論!
還有一種辦法:
private Vector3[] poss = { new Vector3(1f, 2f, 3f), new Vector3(12f, 2f, 1f) }; public Vector3[] Poss { get { return poss; } } // Use this for initialization void Start () { Debug.Log("___"+poss[0]); }
這樣private 實例化時不會出錯,通過屬性的訪問權限也可以讓其它腳本訪問!
有大神說:每個公共變量都是一個被序列化的屬性,不要簡單把它看成一個類型的聲明,就能夠理解了!