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 实例化时不会出错,通过属性的访问权限也可以让其它脚本访问!
有大神说:每个公共变量都是一个被序列化的属性,不要简单把它看成一个类型的声明,就能够理解了!