UE4蓝图学习笔记2 Open World game CodeLikeMe

第一部分-主角控制 链接:桃芙:UE4蓝图学习笔记1-Open World game CodeLikeMe

Open World game CodeLikeMe 第一部分——第三人称游戏角色战斗

45集、46集、48-50集、52集——近战战斗

一、对战对象-AI npc

1.使主角蓝图成为CH_Human子蓝图类:

以CH_Human创建一个子类蓝图CH_Player,删除CH_Human中的SpringArm和Camera。 在世界场景设置中,将CH_Player作为默认pawn类。

2. 新建蓝图类AI_Human,类型为detourcrowdAIcontroller,在CH_Human(self)的细节-Pawn-AI控制器类中选择AI_Human。将CH_Human拉入场景中。

3. 增加寻路网格:

将导航网格体边界体积放入场景中,xyz方向均放大若干倍。(按P键可使导航网格覆盖区域可见)

4. 使npc随机移动:

(1)新建接口蓝图BPI_AI,接口函数名GoToLocation,输入变量target location为向量型。

(2)GoToLocation输出端:在AI_Human的类设置中增加BPI_AI,并放入GoToLocation函数事件,执行AI move to 功能,调节半径。将GoToLocation函数输出的target location向量进行“获取半径内可抵达的随机点处理”,调整半径,再作为AI move to 的目标位置。

(3)当AI move to失败时,delay 2s,再次进行AI move to。

(4)GoToLocation输入端:Begin Play时,执行GoToLocation。target location输入值为该actor位置半径内可抵达的随机点,调节半径。同时,若AI move to执行成功,则再次执行GoToLocation从而前往下一个随机位置。

5. 增加npc移动动作——走、蹲伏

(1)在AI_Human内,将get controlled pawn的输出提升为变量Ch,Begin Play时,先将get controlled pawn赋给Ch,再执行GoToLocation。

(2)在AI_Human内,获取Ch作为ToggleRun和ToggleCrouch的目标。在执行GoToLocation后,以随机布尔值作为判断,分别执行ToggleCrouch和ToggleRun,并将该随机布尔值作为两个函数的布尔输入。

二、设置以npc为中心的动态导航网格

  1. 在项目设置-导航系统中,勾选仅在导航触发器周围生成导航

2. 将之前放置的NavMeshBoundsVolume放大覆盖整个世界地图

3.为CH_Human新建子类蓝图CH_NPC,去掉CH_Human中的AI控制器,转移给CH_NPC,并给CH_NPC增加导航触发器组件。最后将场景中的CH_Human替换为CH_NPC。

三、佩戴与拔出武器

1.武器佩戴与挂点

(1)在CH_Human的骨骼中,于肩部骨骼处增加一个插槽,命名为Sword1Socket;于右手骨骼上增加插槽,命名为SwordInHandSocket。

(2)在CH_Human的mesh层下,增加两个Scene组件,分别命名为SwordStrap和HandSocket,分别在细节的socket选择Sword1Socket和SwordInHandSocket。

(3)导入外部武器资源,先后放在SwordStrap和HandSocket下,调整武器本身大小,再将武器在scene下时调节Scene的位置、旋转,使武器在位置和旋转都为0,0,0时分别能正常显示在肩膀后和手中。最后将武器默认放在SwordStrap下。

2.拔剑动作:

(1)导入外部拔剑动作资源,为其建立蒙太奇文件.

(2)在项目设置-input中,增加操作映射ToggleSword,关联键盘按键1.

(3)在CH_Human中,增加Fight图表,获取ToggleSword输入事件。新增默认为false的bool值SwordEquiped,当ToggleSword输入发生时,将SwordEquiped取非赋给SwordEquiped,再作为判断条件:

a. 若为true,则播放拔剑动作蒙太奇,delay若干s(到动画拔剑时刻),执行Attach To Component,将武器作为对象,HandSocket作为parent,位置、旋转、缩放都选择保持场景,再执行move component to, component为武器。

b. 若为false,同样播放拔剑动作蒙太奇,delay,执行Attach To Component,move component to, 但SwordStrap作为parent。

四、动作融合

1. 在拔剑动画蒙太奇中新增一个slot,命名为UpperBody,将拔剑动作设定给UpperBody。

2. 在BPA_Human中,增加关联UpperBody的slot。在原本的DefaultSlot后连接“新保存的缓存姿势”节点Pose_Default。

增加2个关联Pose_Default的"使用缓存姿势"节点,一个输出给“每个骨骼的分层混合”的base pose,另一个连接到UpperBody,再输出给“每个骨骼的分层混合”的blend pose0.将混合结果输出给最终动画Pose。

3.在角色骨骼上找到整个上半身的根节点,记录其名字。在“每个骨骼的分层混合”细节中的层设置-分支过滤中增加元素,将上半身名字放入。

五、攻击动作

1. 导入外部攻击动作1资源,建立蒙太奇,放在default slot中。在是项目设置中增加新操作映射Attack,关联鼠标左键。

2.将CH_Human中原来输入事件ToggleSword pressed后的执行节点折叠成宏ToggleSword_M ,在宏中增加对于输出节点的连接。

3. 在CH_Human中,获取Attack输入事件,当pressed时,获取变量Sword Equipped作为判断条件,当true时,播放攻击动画蒙太奇;当false时,执行ToggleSword_M,输入使用默认值true,再执行播放攻击动画蒙太奇。

4. 调整攻击动画蒙太奇的播放速度,使其表现更自然

5. 多段攻击:导入外部攻击动作2资源,建立动画蒙太奇。在CH_Human中新增int型数据AttackCount,每播放一次攻击动作蒙太奇后,++AttackCount,将播放的蒙太奇动画输入改为选择节点。选择中分别放入2个攻击动作蒙太奇,而将AttackCount除以2取余的结果作为Index输入。

此处我没有找到很好的2个动画,因此用了一个动画的2个蒙太奇片段来完成多段攻击

六、多段攻击优化
1. 仅限时连续点击可进入多段攻击:在CH_Human的Attack输入事件后补充一个do once节点。在原本的++AttackCount后delay若干秒(防止动画未播完时重复攻击动画),序列执行do once的reset和第二个delay(多久后会重置会第一个攻击动画)后设置AttackCount=0。两个delay时间需根据动画细调。

2. 防止2段攻击多次播放:

在播放完动画蒙太奇后,执行switch on int,将AttackCount作为输入,增加2个输出引脚——0时执行原本的++AttackCount路径;1时执行AttackCount=0,delay若干秒后执行do once的reset。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值