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

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

  • 相关阅读:
    【转】jQuery学习
    Eclipse工作空间的缺省字符编码问题
    BS与CS的区别
    内部类的作用
    test
    Delphi制作关不掉的程序
    屏蔽指定按钮
    实现拖动无标题窗口的5种方法
    Sql服务器及数据库枚举
    Delphi调用SQL分页存储过程实例
  • 原文地址:https://www.cnblogs.com/vital/p/3753189.html
Copyright © 2020-2023  润新知