不使用对象池
如果不使用对象池,那么假设一个Boss技能发射10个投射物,那么就会导致每次技能的释放需要创建10个投射物,然后遇到条件进行销毁
对象池模式
维护一个存储投射物的容器,然后在发射时从容器中取出,当"销毁时"放回容器中。
实现方式
以发射投射物为例,
首先对于投射物创建一个父类,该父类表示对象池中存储的对象类型,其中维护两个参数分别是是否被使用(bool),该对象有效时间(float)
并且拥有一个方法,当bool值改变时,使得该对象实例的碰撞(collision),显示(hidden)等得到调整
如果是从没有使用变成使用,就还需要增添一个计时器来控制对象的回到池子的时间
对象池模拟
对于对象池的模拟,采用组件的方式进行模拟
首先内部需要维护,当前对象池存放对象的类型,一个对象池维护一种类型,其次是对象池的大小和对象池本身以对象类型数组的方式存在
其首先是初始化方法:在开始时生成对象实例存放到数组中
第二个方法是寻找到到当前有效的对象实例
第三个方法是对该对象实例设置场景中的位置,通过传入FTransform,然后对上一个方法中获得的有效对象实例,进行修改比如修改其布尔值等等
调用方式
首先对于投射物类就需要通过父类来创建,然后将组件挂接在Boss身上,通过在编辑器内中分配组件中的成员变量,实现发射投射物的效果
缺陷
由于在一开始就生成了物体,所以物体会一直存放在内存中,只不过在使用时修改了位置和显示而已,如果不需要这些物体,应当及时删除
标签:投射物,攻击,Boss,对象,实例,组件,父类 From: https://www.cnblogs.com/XTG111/p/18353932