UE4学习笔记 FPS游戏制作16 重构FppShooter和RoboteShooter 提出父类Shooter
文章目录
- 设置父类
- 迁移属性和方法
- 解除Gun类对FppShooter的引用
- 将FppShooter里的Gun相关的方法提升到Shooter里
作为玩家控制的角色和AI控制的角色,两个类都是角色,有一定的共性,给他找一个共同的父物体
设置父类
新建一个蓝图类,Shooter,继承自Character
分别打开FppShooter和RoboteShooter,进入蓝图,选择文件/重设蓝图父项,重新指定父类为Shooter
迁移属性和方法
将RoboterShooter里的TakeDamage,IsDead方法和Health变量移动到Shooter里,需修改Bullet和Rifle里的受伤方法,原来是转换为RoboterShooter,现在是转换为Shooter
迁移后需要注意的点:
1 Health记得赋值
2 TakeDamge这里的线需要重新连
可以右键RoboterShooter资产,选择“引用查看器”来查看引用了哪些资源和被哪些资源引用
被左侧资产被引用,引用了右侧资产
解除Gun类对FppShooter的引用
旧代码中,由于Gun需要获得持有者的信息,使用GunOwner变量储存了FppShooter,现在我要把FppShooter变为Shooter
这将造成一些错误
先编译蓝图,使修改生效
右键GunOwner,选择查找引用
然后点击望远镜来查看所有的引用
依次查看所有变量引用是否正确
最大的问题来自Rifle的ShootOnce方法,在获取射线的出发位置时,由于Shooter中没有Camera组件,这里一定不会正确,且旧有逻辑中只有玩家可以开枪,现在要玩家和NPC都要开枪,玩家从相机开枪,NPC从自己的中间开枪,所以这里还需要提出一个方法
Shooter里添加一个GetShootLocation方法,不需要实现
FppShooter里重写
RoboterShooter里重写
将FppShooter里的Gun相关的方法提升到Shooter里
迁移这些数据,然后开始编译蓝图,哪里出错改哪里
不要先着急删除FppShooter的就方法,因为他们可以提示你原来做了什么,方便替换成新的