🔫CoopGame02-武器1
type
status
date
slug
summary
tags
category
icon
password
导入资产
- 下载源文件,密码:zmingu
- 导入CoopGame\Content\Weapons文件夹到项目
Content
目录
创建武器
创建武器类
- 创建武器C++类
SWeapon
,继承Actor
的。
- 创建继承
SWeapon
武器类的蓝图类BP_SWeapon
,并选择设置武器的骨骼网格体SK_Rifle.

为角色生成武器
- 在角色骨骼的
hand_r
右键添加名为WeaponSocket
武器的骨骼插槽。

- 在
SCharacter
编写代码将武器生成到玩家手上的名为WeaponSocket
的插槽上。
- ***在角色蓝图类中设置要生成的武器类
StarterWeaponClass
的类默认值为BP_SWeapon
调整武器位置
- 在人物骨骼的武器骨骼插槽
WeaponSocket
右键添加预览资产SK_Rifle
,在右侧选择预览动画选Idle_Rifle_Hip

- 调整插槽位置使武器位置正确。

武器开火
- 在武器类
SWeapon
中编写开火函数
- 在角色蓝图
BP_SCharacter
使用鼠标左键事件调用武器的开火函数,此时开火可见从玩家身上摄像机发出的射线。(右键搜索CurrentWeapon
变量,从该变量调用Fire()函数)


使开火产生伤害
- 武器类中添加伤害类型变量
- 伤害类型介绍:

- 这里调一下角色身上的弹簧臂的位置,让待会更好观察并测试代码结果.

- 在角色蓝图类
BP_SCharacter
,添加事件点状伤害
并绘制调试球体,将网格体碰撞打开, - 在场景中拖入
BP_SCharacter
测试射击结果。


开火特效
枪口特效和击中特效
- 导入武器特效资产,目录
WeaponEffects
,并编写SWeapon
武器类。
BP_SWeapon
蓝图类设置特效的默认值如下,并测试。

- 攻击地板,可以看到已经有了枪口特效和击中特效,其中我们会发现奇怪的问题,射线检测是从角色上发射出来的,这明显是不对,需要修改成从摄像机(也就是我们作为玩家看的方向)发射,在后面编写弹道特效的同时会进行修改.

弹道特效
- 先设置弹道特效粒子
P_SmokeTrail
的参数名为Target(光束粒子发射器)

- 添加弹道特效
- 为武器BP_SWeapon蓝图类设置上弹道特效默认值.

- 现在来改变一下射线发射的初始位置.
- 可以看到我们调用的
GetActorEyesViewPoint()
获取的位置是在角色上方加上BaseEyeHeight
的值的位置,我们要修改成玩家摄像机位置. - 在角色类
SCharacter
中重写GetPawnViewLocation()
函数



- 注释掉之前的调试射线
武器准星
- 新建UI目录,新建控件蓝图,命名
WBP_Crosshair
.
- 拖入image图片,锚点设置为中心,其他设置如下.

- 在角色蓝图
BP_SCharacter
中的BeginPlayer
事件编写逻辑,将控件添加到视口

运行效果

挑战:榴弹发射器
- 创建继承SWeapon的C++类
SProjectileWeapon,
重写Fire()函数
- 将
SWeapon
的Fire()函数修改为虚函数.
SProjectileWeapon
类中重写Fire()
函数,声明子弹类.
- 创建蓝图类
BP_GrenadeLauncher
,继承SProjectileWeapon
类,设置该蓝图类的网格体为Launcher
- 重命名
Launcher
骨骼网格体的骨骼Launcher_Skeleton
中的插槽名MuzzleFlashSocket
改为MuzzleSocket
- 创建子弹类蓝图
BP_GrenadeProjectile
继承Actor类,并添加发射物移动组件ProjectileMovement
,设置初始和最大速度为2000,勾选应反弹 - 添加球体网格,并作为根组件,缩放为0.25,勾选模拟物理
- 在BeginPlay事件中编写特效和伤害代码

- 在
BP_GrenadeLauncher
榴弹发射器类中中设置发射物类为BP_GrenadeProjectile

- 在
BP_SCharacter
角色类中的类默认值中设置要生成的武器为榴弹发射器类BP_GrenadeLauncher

- 测试结果

Prev
CoopGame01-创建玩家
Next
CoopGame03-武器2
Loading...