加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 综合聚焦 > 编程要点 > 语言 > 正文

UE4添置人物动画之状态机

发布时间:2022-07-17 16:35:52 所属栏目:语言 来源:互联网
导读:这一节我们创建一个动画蓝图并在C++中把它绑定到角色身上 。 状态机 状态机是可以让动画过渡到另一个动画的工具,它大大简化了动画设计流程。 1) 在 UE4 编辑器中,我们以 AnimInstance 为父类创建一个名为 CharacterAnimInstance 的子类。 2) 进入到我们
  这一节我们创建一个动画蓝图并在C++中把它绑定到角色身上 。
  状态机
  状态机是可以让动画过渡到另一个动画的工具,它大大简化了动画设计流程。
 
  1) 在 UE4 编辑器中,我们以 AnimInstance 为父类创建一个名为 CharacterAnimInstance 的子类。
 
  2) 进入到我们的骨骼网格体文件夹路径,右键选择该资源,创建一个动画蓝图。
 
  3) 打开 CharacterAnimInstance.h 添加两个变量,并把这两个变量公开到蓝图中,让蓝图可以编辑,然后继承 NativeUpdateAnimation 函数,这个函数会每帧更新我们的变量属性。
  /**
  * //角色动画蓝图
  */
  UCLASS()
  class GAMEPROJECT_API UCharacterAnimInstance : public UAnimInstance
  {
      GENERATED_BODY()
  protected:
      virtual void NativeUpdateAnimation(float DeltaSeconds) override;
      //判断人物有没有移动
      UPROPERTY(BlueprintReadOnly)
          float IsMove;
      //判断人物有没有跳跃
      UPROPERTY(BlueprintReadOnly)
          bool IsJump;
  };
 
  6) 在CPP文件中添加 PlayingCharacter.h 和 GameFramework/CharacterMovementComponent.h 并实现这些变量。
  #include "CharacterAnimInstance.h"
  #include "PlayingCharacter.h"
  #include "GameFramework/CharacterMovementComponent.h"
  void UCharacterAnimInstance::NativeUpdateAnimation(float DeltaSeconds)
  {
      Super::NativeUpdateAnimation(DeltaSeconds);
      //TryGetPawnOwner() 返回的是一个Pawn类,它通过骨骼模型组件返回指认了它的角色,然后再把返回的Pawn转换成我们想要的角色
      APlayingCharacter* Character = Cast<APlayingCharacter>(TryGetPawnOwner());
      if (Character)
      {
          //GetVelocity() 返回的是角色的移动组件的速度,如果这个值大于0说明Character在移动,Size() 是获取向量的模
          IsMove = Character->GetVelocity().Size();
          //IsFalling()  如果角色当前正在下降就返回真
          IsJump = Character->GetCharacterMovement()->IsFalling();
      }
  }
 
  这一节就到这里,下一节我们会在状态机中使用这些变量并设置动画。

(编辑:云计算网_泰州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读