Unity游戏开发之路上的那些坑——NullReferenceException
来源:互联网 发布:淘宝网买家中心 编辑:程序博客网 时间:2024/06/05 14:41
NullReferenceException 这是什么意思,原谅我英语不好,看来要好好学学英语了,一门让我又爱又恨的学科。
空引用异常,暂且就这样翻译吧,不要在意,这都不是事,今天要说的这个才是重点,也是我在码代码过程中遇到的一些坑吧,哎,就想当年犯下的错,暂且一记,给以后留个纪念,哈哈,说的有点煽情了,都是废话,现在进入正题:
开始我想先来一个图,如下:
东西做的有点low,勉强能看吧,主要是屏幕上的两个按钮,button1就是创建一个Cube,button2就是为这个物体创建一个Rigidbody,让物体下落, 其实这都不是主要的,主要的是看看下面的报错吧,代码部分如下:
void OnGUI() { GameObject obj=null; if (GUILayout.Button ("Button1")) { obj = GameObject.CreatePrimitive (PrimitiveType.Cube); } if (GUILayout.Button ("Button2")) { obj.AddComponent<Rigidbody> ().useGravity = false; } }
然后分别点击button1,button2,错误就这么突如其来的出现了,就想哪位让我等了好久的菇凉,哈哈,虽说没什么好期待的,现在我们就来分析一下错误出现的原因究竟在那个地方,注意重点来了;
其实,这里我犯了一个在别人看来很是简单的错误,从Console上面理解就是我在代码里面引用了不该引用或者压根就不存在的东西,由于自己是个小白,所以没能当即就找出原因所在,然后我就不断的设置断点调试,最后发现是这个obj 的锅,我为这个物体添加了一个Rigidbody组件,但是这个obj压根就不存在,所以会报错了,究其原因主要是有以下几点造成的:
1.代码写的不够严密
2.对OnGUI 函数调用的理解不到位,
3.经常犯错不知道总结
针对以上的三点,特作出下面的解释
part1.当我们在引用一个对象或者为这个对象添加某个组件的时候,一定要先冷静下来想一想这个对象是否存在,或者说当游戏开始运行后是否存在,这是两个不同的概念,也是我犯错的原因所在,感想,以后在针对这种问题的时候可以先添加一个if语句判断一下这个obj 是否是null,这样我们的代码就严密了许多。
part2.OnGUI()函数的调用 规律,一般在每一帧中OnGUI函数都会调用一次,当然还有一些版本说每一帧会调用两次,反正就是每一帧都会调用就行了,然后我就犯了一个错误,把GameObject obj=null;这个语句用在了OnGUI()函数里面了,然后每一帧掉用的过程中,相当于就重新执行了这个语句,最终我按下button1产生的Cube就这样呗覆盖了一个null,综上所叙,以后在声明变量的过程中最后将一下一次赋值的变量放在那些不是按每一帧(像Update(),FixedUpdate(),OnDUI等等)进行更新的函数里面。然后我就重新做了一下,吧GameObject obj=null;这段语句放在了外面,运行就没什么问题了。
part3,这个才是本文的重点,也是本文的结束点,为了吸取教训,特发此记,谨记!!!;
- Unity游戏开发之路上的那些坑——NullReferenceException
- Unity游戏开发之路上的那些坑——NullReferenceException
- Unity游戏开发之路上的那些坑——NullReferenceException
- 微信小程序开发之路上遇到的那些坑
- 微信小程序开发之路上遇到的那些坑
- scrapy 学习之路上的那些坑
- 那些在开发微信扫码登录路上的坑
- 那些年在Android之路上踩过的坑
- Unity开发—简单的RPG游戏
- HBuilder开发之路上的坑儿
- Unity+Vuforia开发增强现实(AR)教程——识别图的那些坑
- Unity+Vuforia开发增强现实(AR)教程——识别图的那些坑
- Unity+Vuforia开发增强现实(AR)教程——识别图的那些坑
- git配置路上的那些坑
- unity 协称路上遇到的坑
- 细数那些年我们一起玩过的Unity3D游戏(unity开发的游戏有哪些)
- Unity游戏开发——unity接入多渠道sdk
- android+unity游戏开发之常用的属性
- tftp客户端实现(一)-发出一条RRQ消息
- CentOS查询端口占用和清除端口占用的程序
- [LeetCode]Battleships in a Board 战舰数目
- Android WebView那些坑之上传文件
- POJ-3983-快算24(简单模拟)
- Unity游戏开发之路上的那些坑——NullReferenceException
- java单例设计模式之饿汉模式
- android教你打造独一无二的刷新加载框架
- 斯坦福机器学习教程学习笔记之1
- Tcp内部常见计时器
- Python列表的语法和使用
- 未来12个趋势
- jQuery选择器之表单元素选择器
- boostrap-导航