报错内容:

代码内容:

报错,预制体ball不出来。这咋办呀!


对代码背后的执行结果太信任了,没有判空,以至于下一句代码直接对null执行了,就导致了异常。

解决方法就是改变编程思维,「防御性编程」,不相信所有代码的执行结果都符合预期,对于载入、查找等代码充分考虑失败情况,

思维改过来就完事了


Update里也有类似的情况,以及那个Destroy,不觉得哪里不对劲吗


Scene场景里 fireposition 你 拼错了。


逆推查错,你这是丢失对象。就是那个fire对象没有。那为什么会没有呢,你是通过find查找名字的,,那为什么找不到,顺明要不是你把场景的对象在某个地方删除了,要不就是名字打错了,然后你一看,名字打错了


本来想嘲讽你几句的,想了想算了。都是新手过来的。你的fireposition在场景中和代码中拼写不一致。

希望你下次遇到报空的,首先检查拼写错误


小球产生位置的名字写错了……只要是报错展示没有找到实力对象,一般就是名字拼写错了,或者载入路径填错了。都是字元串的锅。

过来人提醒你一下~把小球产生位置做成你发射子弹物体的子物体一起打预制体,如果代码挂发射物体,就用transform.Find(),商业游戏里如果不是做Demo用GameObject.Find是要被抓去浸猪笼的~宁可拖~你要是拖了,你也就不用在这问这个问题了~


最烦的就是新手问这种问题,你有这个问问题的时间,把unity里的名字直接复制到代码里很难吗?


还是认为方法论很重要. 可以试试try{}catch(你的报错类型){ 打个return;然后贴上断点 } 运行看看是怎么回事,然后去反推哪些操作会导致这么脑残的结果...

不过就空引用而言是你的代码防御性太低了.(然后仔细一看是名字打错了就更离谱了) 不过一定要注意:不要信任Unity的底层实现! 做好try catch的报错系统, Unity有时会相同的代码执行出不同的效果就很离谱.


别这样,如果在业务哲学上不能为null,你就不能容错处理,反而是坚决不容错处理,该报错就得报错,否则你业务逻辑一旦复杂出了你就知道痛了。


推荐阅读:
相关文章