对象池模式,处理Boss的投射物攻击
不使用对象池
如果不使用对象池,那么假设一个Boss技能发射10个投射物,那么就会导致每次技能的释放需要创建10个投射物,然后遇到条件进行销毁
对象池模式
维护一个存储投射物的容器,然后在发射时从容器中取出,当"销毁时"放回容器中。
实现方式
以发射投射物为例,
首先对于投射物创建一个父类,该父类表示对象池中存储的对象类型,其中维护两个参数分别是是否被使用(bool),该对象有效时间(float)
并且拥有一个方法SetInUse,当bool值改变时,使得该对象实例的碰撞(collision),显示(hidden)等得到调整
如果是从没有使用变成使用,就还需要增添一个计时器来控制对象的回到池子的时间
对象池模拟
对于对象池的模拟,采用组件的方式进行模拟
首先内部需要维护,当前对象池存放对象的类型,一个对象池维护一种类型,其次是对象池的大小和对象池本身以对象类型数组的方式存在
其首先是初始化方法:在开始时生成对象实例存放到数组中
第二个方法是寻找到到当前有效的对象实例
第三个方法是对该对象实例设置场景中的位置,通过传入FTransform,然后对上一个方法中获得的有效对象实例,进行修改比如修改其布尔值等等
调用方式
首先对于投射物类就需要通过父类来创建,然后将组件挂接在Boss身上,通过在编辑器内中分配组件中的成员变量,实现发射投射物的效果
注意
当Projectile发生碰撞后,会调用SetInUse(false),所以在定时器处理调用时,需要先判断当前Actor的Use是否为true
其次,是当方式碰撞时,ProjectileMovement可能会停止更新运动,即对于其绑定的SphereCollision可能会失效,所以需要在下一次调用产生粒子之前,重启组件
C++中的FRotator结构体和蓝图中Split某个Rotator节点的区别
之前以为是对应,结果发现并不是,可以在源码中看到FRotator结构体的三个变量分别对应Splite后的Y,Z,X
缺陷
由于在一开始就生成了物体,所以物体会一直存放在内存中,只不过在使用时修改了位置和显示而已,如果不需要这些物体,应当及时删除
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本