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 实例化时不会出错,通过属性的访问权限也可以让其它脚本访问!

有大神说:每个公共变量都是一个被序列化的属性,不要简单把它看成一个类型的声明,就能够理解了!

原文地址:https://www.cnblogs.com/vital/p/3753189.html