Skip to content

Latest commit

 

History

History
63 lines (24 loc) · 2 KB

Unity-Debug.md

File metadata and controls

63 lines (24 loc) · 2 KB

Unity-Debug

*人物注册问题

(问题引入

​ 在3D教程中,使用了观察者的模式将 Player 反向注册给 GameManager ,但是当将注册语句从 Start() 函数切换到 OnEnable() 函数中时,会发现许多位置出现了空引用的情况。

(原因

​ 出现上述问题,是因为在 Player 向 GamaManager 注册时,需要将自身的组件提前初始化,否则则会将空的组件注册到GameManager上,从而导致很多地方出现空引用。

(解决方式

​ 将初始化的函数执行也调整到 OnEnable() 函数中,并在注册语句之前执行即可。

子弹攻击位置问题

(问题引入

​ 在学习3DRPG教程中,为石头人Boss扔出的石头增添了对象池,以防在石头人扔出过多的石头导致内存溢出。

​ 但在对象池最初的存量用完时,石头人再次扔出石头,石头的方向会出现不正常的偏移。

(原因

​ Debug后发现,问题原因是:在给予扔出的石头一个新的力时,石头的位置还未重置。 即,石头对自身与目标的相对位置计算发生在重置位置语句之前,导致了计算的错误。

​ 根本原因是代码的执行逻辑出现了问题。

(解决方式

​ 共有两种:

  1. 重载对象池出队函数将物体生成的坐标传给出队函数,并在计算与角色相对位置之前,将石块的位置重置
  2. 从对象池返回一个 SetActive(false) 的对象,在外部启用,保证其在重置位置之后再计算与角色的相对位置。

两种方式各有优缺点。

​ 前者可以不需要更改外部与对象池交互的逻辑,但是如果重构次数过多,对象池中的代码量可能会成倍增加

​ 后者则截然相反,有点是代码量不会改变,缺点是外部与对象池的交互逻辑改变了