unity3D中數組初始化調用出界


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 實例化時不會出錯,通過屬性的訪問權限也可以讓其它腳本訪問!

 

有大神說:每個公共變量都是一個被序列化的屬性,不要簡單把它看成一個類型的聲明,就能夠理解了!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM