翻译自Udemy的视频课程introduction-to-unreal-engine-4-ability-system
01、创建Git仓库,使用UE4.22 + VS2019 创建C++基础工程,并添加Paragon Shinbi到工程中
02、创建C++ BaseCharacter,并且基于该Character派生蓝图子类BP_BaseCharacter
03、BP_BaseCharacter中指定Mesh,添加SpringArm和Camera,适当调整位置,编译保存
04、创建蓝图GameMode,命名为BP_GameMode,在其中指定Default Pawn class为BP_BaseCharacter,并且在项目工程设置里(Edit->Project Settings->Maps and Modes)设置Default Mode为BP_GameMode
01、Edit->Project Settings->Input 添加输入
02、创建C++ Player Controller类,并基于此派生蓝图子类BP_BasePlayerController,在GameMode中指定PlayerController为BP_BasePlayerController
03、在BP_BasePlayerController的EventGraph中添加基础的移动控制逻辑
01、在BP_BasePlayerController的EventGraph中添加基础的相机控制逻辑
这里设置后不能够控制相机的Pitch
相应的需要在BP_BaseCharacter中设置继承Controller的Pitch和Yaw以便使得Character来使用Controller的旋转,然而你会发现旋转相机的时候人物也会跟着上下旋转
所以采用另一种方式:C++中经常会对SpringArm说bUsePawnControlRoation=true也是这个道理
SpringArm中:
02、当前的相机设置是符合射击游戏需求的,但是RGP游戏中经常想观察人物(。。。),即不想让左右旋转相机的时候让人物跟着动,将Use Controller Rotation Yaw取消勾选。
另外还要再Movement component中勾选Oriten Rotation to Movement,这样子在移动的时候,人物在移动的时候会自动转向相机所面对的方向
03、当在移动的时候相机旋转的太快,人物在转向相机的方向时候不自然,将Rotation Rate 设置的大一些,如720
01、创建animation blueprint,命名为AnimBP_Shinbi。
02、EventGraph中主要是获取Velocity(用于驱动动画是否奔跑)和IsFalling(用于驱动动画是否跳跃)
三个变量OwnedCharacter、MeshSpaceVelocity、IsFalling
01、AnimGraph的逻辑是通过状态机实现的,添加一个statemachine,locomotion表明动画发生在local space
02、创建一个BlendSpace,命名为BS_Idle_Walk_Run
03、在动画蓝图中使用该BlendSpace
01、状态机中添加对应的动画与转换逻辑(简化了Jump部分的逻辑)
在动画蓝图中,Animation montage的播放时通过slot来完成的,
01、创建Animation montage,命名为AM_Shinbi_Melee
02、拖入想要播放的动画片段,可以指定自定义的slot
03、动画蓝图中,添加一个slot,指明为自定义的slot
04、在BP_BaseCharacter中创建一个Custom Event,当该事件发生的时候用来播放攻击的动画蒙太奇
05、设置输入PrimaryAction绑定到鼠标左键,在BP_PlayerController中的鼠标输入事件中调用MeleeAttack
其中该节点的相关设置,参照Shinbi自带蓝图
(说明,这里的动画上下半身不自然是由于上半身有一个360度转体的动作,如果没有较大转体的动作话会较自然一些,所以将之前的动画蒙太奇中的动画片段改为使用PrimaryMelee_D_Slow),如果我就是想用这种转体较大的动作时,我应该如何做呢?所以就有了下一节:
01、第一帧的时候添加一个Notify,命名为StartFullBody,适当的位置添加StartHalfBody
02、动画蓝图中就会相应的获取到相应的通知事件,设置一个bool变量
03、AnimGraph中应用BlendPosesByBool
(说明,这相当于是强制性的播放完整动画,感觉在有的动画播放的时候应该停止移动,在接收到Start HalfBody这个通知的时候才可以移动,这样子才比较合适,如下是我自己添加的部分,主要是在人物中添加了两个CustomEvent用于设置MaxWalkSpeed的大小),此外还需要设置动画的播放速度,太快了反而缺乏感觉
由于GAS还不完全支持蓝图,需要用到C++,在下一篇中继续记录