俯视角2D游戏_02 子弹对象池

[!NOTE] 对象池
应用场合:这种做法常用于子弹这种会大量产生的对象 ,目的是减少性能的损耗
基本思路:产生的对象是有限的,并且加入到"对象池"的数组中不进行销毁,当需要使用时,再从对象池中提取对象循环利用,以达到有限的对象无限的调用的结果(这使我想到了庞加莱回归)
(这里的对象池是一种抽象的说法,它实际上在场景中一个玩家看不到的位置,只不过程序上来说这个对象在对象池的数组中)

制作思路

  1. 要实现子弹的对象池,需要做以下三件事
    • 创建一个游戏实例(游戏实例在虚幻引擎中的生命周期是最长的,不会受到关卡的切换而受到影响)
    • 创建子弹类(具体生成的实例的类,这个类为了可以复用,需要可以定制化)
    • 创建对象管理器(这个类用于处理玩家蓝图中发射子弹指令并管理关卡中生成的实例,以及实例生成的规则)
  2. 调用关系
    玩家蓝图——>对象管理器——>游戏实例&子弹类

详细制作案例

制作一个可以自定义的子弹类,玩家按鼠标右键可以朝光标位置发射,发射这个子弹时使用对象池的方式对其进行处理

1. 创建游戏实例

创建游戏实例并应用

在这里插入图片描述#### 应用该游戏实例
在这里插入图片描述#### 游戏实例可被调用
游戏实例需要有引入两个变量
在这里插入图片描述#### 在公用函数库中编写一个游戏实例的调用函数方便后续调用

2.子弹类

创建一个枚举变量用于管理子弹类的状态

在这里插入图片描述#### 创建子弹类

制作子弹类的生成函数

该函数需要可定制化制作
在这里插入图片描述##### 制作子弹回收函数(被生成函数调用)
这个函数就是子弹的生命周期结束后,把子弹加入对象池并把对象移到一个看不见的地方(对玩家来说这颗子弹就相当于被销毁了)
在这里插入图片描述### 3.对象管理器

创建一个蓝图类作为对象管理器

初始化函数需要获取游戏实例并设置对象管理器为当前游戏实例
在这里插入图片描述#### 创建一个子弹的对象池管理函数(重点
这个函数用于管理子弹的对象池,由玩家蓝图进行调用
- 每次对象是否处于回收的状态(可以理解为子弹是否在子弹池中)
- 每次循环结束都判断一下子弹是否有效
- 如果无效(说明场上没有子弹),就生成一个子弹并将其加入子弹池数组,设置其参数和生成位置
- 如果有效(说明场上有子弹,子弹池中有子弹),就直接设置其参数和生成位置
在这里插入图片描述### 4.玩家蓝图的输入事件

1.创建发射子弹的按键映射(略)
2.创建发射函数

这个函数的功能

  • 调用了对象管理器中的子弹池管理函数并设置了子弹的参数
  • 获取了光标所在的位置并将位置参数传给子弹池管理函数
    在这里插入图片描述##### Tips
  1. 需要在玩家控制器中显示鼠标光标
    在这里插入图片描述
  2. 对象管理器需要放置在场景中实例化才能被正确调用
  3. 注意场景的碰撞通道中的可视化通道是否被忽略了,因为光标的获取需要可视化的通道是是阻挡
    在这里插入图片描述
    在这里插入图片描述
  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值