【Unity】坑
记录在unity中遇到的各种坑
对象销毁
当GameObject被销毁后,!= null任然可能为true。比如有一个PanelBattle的类,如果你在另外一个地方存储了该类,然后又销毁了这个对象。此时如果你再访问这个对象是不会报空的(因为PanelBattle != null),但是如果你访问其中的元素就会报空(因为PanelBattle.m_btnStartButton == null)。
解决方案:在判断GameObject是否为空的时候添加一个判断
1 | // 以下只是举个例子,不要这样写。 |
案例一:
前提:你需要在物体A的下方安放子物体B,A初始化时需要获取所有的子物体B,之后物体B的数量将不再改变
触发条件:在同一帧下先回收了物体B,然后又创建了物体B,然后又初始化了A
结果:物体A使用的GetComponentsInChildren会获取到两个物体B,并且第一个B会在下一帧被回收掉,导致后续的代码会报空
解决方法:不再直接销毁掉物体B,而是使用对象池,将其回收到对象池(也就是改变了其父级),这样物体A使用GetComponentsInChildren时就只会获取到一个B
案例二:
1 | private PanelBattle _panelBattleCache; |