美文网首页
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