美文网首页
Unity SerializeField序列化字段导致Bug的跳

Unity SerializeField序列化字段导致Bug的跳

作者: 雨落随风 | 来源:发表于2017-06-27 19:25 被阅读316次

    偶遇Bug

    笔者完成了序列帧播放模块,结果在测试时,第一次调用播放方法时没反应,第二次调用才播放。

    BUG演示
    为了解决无法知道笔者何时点击了鼠标,不得不在方法体里面萌萌哒的输出这些话:
                string[] msg = new string[3] { "第1次点击,居然不播放动画!", "第", "次点击,动画有播放~" };
                Debug.Log(count == 0 ? msg[0] : (msg[1] + (count + 1) + msg[2]));
                count++;
    

    解决Bug

    这是一个Bug,不能忍!
    几经调试,问题终于找到了,就是这个[SerializeField]搞的鬼!
    来来,我们调试一下:

    代码:

    字段:
    [SerializeField] Texture[] EmojFrame = null; //存储动画帧的Texture数组
    
    方法体内:
    EmojFrame = EmojFrame ?? EmojManager.GetInstance.GetExpTextureByModelName(model.name, index);
    //上下2句代码是关联的,后面对象中的那个方法得到的是Texture数组
    

    断点调试:

    Bug就出现在这个节骨眼

    如上所示,这样导致了后续代码中的条件( 如下:)不能满足而不能实现序列帧的播放。

    “0”会小于“0”?``IF``内的代码执行的了才叫真的怪事了

    总结:

    本为了便于观察Texture而列化了该数组,导致数组赋null失效,可空合并运算首次运行无法为EmojFrame数组赋值(Tips:??可空合并运算符)最终导致了文章刚开始动画见到的现象。

    躲坑:

    1. 如果字段在后续逻辑中会判断null,建议不要序列化该字段
    2. 如果一定要序列化,防止掉坑里,建议:
    3. 在start函数赋值null;
    4. 如果是数组这样的字段,逻辑中不判断null改为判断长度是否为0

    标签:Unity3D、脚本编程、[SerializeField]、可空合并运算符


    快捷访问:

    1. Unity3D 如何设置CubeMap
    2. UGUI Button OnClick事件统一管理
    3. UGUI Slider onValueChanged事件统一管理
    4. UGUI Toggle onValueChanged事件统一管理
    5. Unity3D监测按键输入(快捷键)的有效方法
    6. Unity3D Editor模式下的System.IO数据访问
    7. Unity3D 挂载的脚本取消勾选居然还会运行!!
    8. Unity 代码动态勾选或取消材质球上的选项
    9. Unity SerializeField序列化字段导致Bug的跳坑笔记 ←您在这里

    相关文章

      网友评论

          本文标题:Unity SerializeField序列化字段导致Bug的跳

          本文链接:https://www.haomeiwen.com/subject/ggbecxtx.html