设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 创业者 数据 手机
当前位置: 首页 > 综合聚焦 > 编程要点 > 语言 > 正文

UE4添置人物动画之状态机

发布时间:2022-07-16 12:11 所属栏目:51 来源:互联网
导读:这一节我们创建一个动画蓝图并在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();
      }
  }
 
  这一节就到这里,下一节我们会在状态机中使用这些变量并设置动画。

(编辑:ASP站长网)

    网友评论
    推荐文章
      热点阅读