可以再Mixamo下载你想要的人物,将文件全部导入(不做更改)
再在网站里选到动画,下载一些动画左转,右转,起跳,跳中,落下
导入动画,此时不用选择导入骨骼,刚才已经导入了,重定向动画(不一样了不搞了随便搞几个动画)
在C++里创建一个character类型,完成后会跳出这个,点击全部重新加载。基于此类创建一个蓝图类
进入蓝图,选择人物骨骼修改位置让它在中间
开始编写代码
在cpp中定义实例并且完成附加功能,此时编译后再UE里人物就有相机,在蓝图里把它调整为合适位置
建立操作映射,名字要对上绑定的第一个输入
前进后退和左右转一样,轴不同,鼠标的话就是Yaw和pitch轴输入
按键绑定函数,一个是操作映射(需要指定按键的状态),一个是轴映射
创建一个新的C++类,并且删除Cpp里的路径
编写头文件
- #pragma once
-
- #include "CoreMinimal.h"
- #include "Animation/AnimInstance.h"
- #include "Shooter_AnimInstance.generated.h"
-
- /**
- *
- */
- UCLASS()
- class SHOOTER_API UShooter_AnimInstance : public UAnimInstance
- {
- GENERATED_BODY()
-
-
- public:
- //这个函数在初始化动画实例时被调用。通常在这个函数中,你可以执行一些初始化工作,例如获取与动画实例相关的角色对象的引用。这是一个在初始化时执行的回调,用于准备动画的初始状态。
- virtual void NativeInitializeAnimation() override;
- //这个函数在每一帧更新动画实例时被调用。在这个函数中,你可以实现自定义的动画逻辑,例如计算角色的速度、位置或其他与动画相关的属性。
- virtual void NativeUpdateAnimation(float DeltaTime) override;
-
- private:
- // 角色对象的引用
- UPROPERTY(BlueprintReadOnly,Category = Character,meta = (AllowPrivateAccess = "true"))
- class AShooterCharacter* ShooterCharacter;
-
- //相当于进入动画的条件变量了,很熟// 角色速度
- UPROPERTY(BlueprintReadOnly, Category = MoveMent, meta = (AllowPrivateAccess = "true"))
- float Speed;
- // 是否正在下落
- UPROPERTY(BlueprintReadOnly, Category = MoveMent, meta = (AllowPrivateAccess = "true"))
- bool bis_Falling;
- // 是否正在加速
- UPROPERTY(BlueprintReadOnly, Category = MoveMent, meta = (AllowPrivateAccess = "true"))
- bool bis_Accelerating;
-
- };
编写cpp
- // Fill out your copyright notice in the Description page of Project Settings.
-
-
- #include "Shooter_AnimInstance.h"
- #include "ShooterCharacter.h"
- #include "GameFramework/CharacterMovementComponent.h"
-
- void UShooter_AnimInstance::NativeInitializeAnimation()
- {
- Super::NativeInitializeAnimation();
-
- // 初始化ShooterCharacter对象
- ShooterCharacter = Cast
(TryGetPawnOwner()); - }
-
- void UShooter_AnimInstance::NativeUpdateAnimation(float DeltaTime)
- {
- Super::NativeUninitializeAnimation();
-
- if (ShooterCharacter == nullptr)
- {
- ShooterCharacter = Cast
(TryGetPawnOwner()); - }
- if (ShooterCharacter == nullptr) return;
-
- //获取速度,不在乎z轴速度
- FVector Velocity = ShooterCharacter->GetVelocity();
- Velocity.Z = 0.f;
- Speed = Velocity.Size();
- //从GetCharacterMovement获取人物是否在下落
- bis_Falling = ShooterCharacter->GetCharacterMovement()->IsFalling();
- //从GetCharacterMovement获取人物是否在加速
- bis_Accelerating = ShooterCharacter->GetCharacterMovement()->GetCurrentAcceleration().Size() > 0.f ? true : false;
-
- }
创建一个动画蓝图,进入将父类设置为刚刚写好的Shooter_Animlnstance
设置动画状态和条件,框选的使用变量bisfalling,另外一个使用自动规则
在跳跃结束和走路的状态切换条件使用动画剩余时间作为条件
创建一个混合空间1D,将idle,walk,run的动画放入并设置轴。在待机状态中添加动画设置speed。将人物蓝图里的动画蓝图设置为新建的动画蓝图,人物走动时就有了动画