• MultiPlayerShoot----C++学习记录02人物


    获取人物和动画

    可以再Mixamo下载你想要的人物,将文件全部导入(不做更改)

    再在网站里选到动画,下载一些动画左转,右转,起跳,跳中,落下

     导入动画,此时不用选择导入骨骼,刚才已经导入了,重定向动画(不一样了不搞了随便搞几个动画)

      创建角色

    在C++里创建一个character类型,完成后会跳出这个,点击全部重新加载。基于此类创建一个蓝图类

     进入蓝图,选择人物骨骼修改位置让它在中间

    开始编写代码 

     在cpp中定义实例并且完成附加功能,此时编译后再UE里人物就有相机,在蓝图里把它调整为合适位置

    建立操作映射,名字要对上绑定的第一个输入 

     前进后退和左右转一样,轴不同,鼠标的话就是Yaw和pitch轴输入

     按键绑定函数,一个是操作映射(需要指定按键的状态),一个是轴映射

    创建动画蓝图 

    创建一个新的C++类,并且删除Cpp里的路径

     编写头文件

    1. #pragma once
    2. #include "CoreMinimal.h"
    3. #include "Animation/AnimInstance.h"
    4. #include "Shooter_AnimInstance.generated.h"
    5. /**
    6. *
    7. */
    8. UCLASS()
    9. class SHOOTER_API UShooter_AnimInstance : public UAnimInstance
    10. {
    11. GENERATED_BODY()
    12. public:
    13. //这个函数在初始化动画实例时被调用。通常在这个函数中,你可以执行一些初始化工作,例如获取与动画实例相关的角色对象的引用。这是一个在初始化时执行的回调,用于准备动画的初始状态。
    14. virtual void NativeInitializeAnimation() override;
    15. //这个函数在每一帧更新动画实例时被调用。在这个函数中,你可以实现自定义的动画逻辑,例如计算角色的速度、位置或其他与动画相关的属性。
    16. virtual void NativeUpdateAnimation(float DeltaTime) override;
    17. private:
    18. // 角色对象的引用
    19. UPROPERTY(BlueprintReadOnly,Category = Character,meta = (AllowPrivateAccess = "true"))
    20. class AShooterCharacter* ShooterCharacter;
    21. //相当于进入动画的条件变量了,很熟// 角色速度
    22. UPROPERTY(BlueprintReadOnly, Category = MoveMent, meta = (AllowPrivateAccess = "true"))
    23. float Speed;
    24. // 是否正在下落
    25. UPROPERTY(BlueprintReadOnly, Category = MoveMent, meta = (AllowPrivateAccess = "true"))
    26. bool bis_Falling;
    27. // 是否正在加速
    28. UPROPERTY(BlueprintReadOnly, Category = MoveMent, meta = (AllowPrivateAccess = "true"))
    29. bool bis_Accelerating;
    30. };

    编写cpp

    1. // Fill out your copyright notice in the Description page of Project Settings.
    2. #include "Shooter_AnimInstance.h"
    3. #include "ShooterCharacter.h"
    4. #include "GameFramework/CharacterMovementComponent.h"
    5. void UShooter_AnimInstance::NativeInitializeAnimation()
    6. {
    7. Super::NativeInitializeAnimation();
    8. // 初始化ShooterCharacter对象
    9. ShooterCharacter = Cast(TryGetPawnOwner());
    10. }
    11. void UShooter_AnimInstance::NativeUpdateAnimation(float DeltaTime)
    12. {
    13. Super::NativeUninitializeAnimation();
    14. if (ShooterCharacter == nullptr)
    15. {
    16. ShooterCharacter = Cast(TryGetPawnOwner());
    17. }
    18. if (ShooterCharacter == nullptr) return;
    19. //获取速度,不在乎z轴速度
    20. FVector Velocity = ShooterCharacter->GetVelocity();
    21. Velocity.Z = 0.f;
    22. Speed = Velocity.Size();
    23. //从GetCharacterMovement获取人物是否在下落
    24. bis_Falling = ShooterCharacter->GetCharacterMovement()->IsFalling();
    25. //从GetCharacterMovement获取人物是否在加速
    26. bis_Accelerating = ShooterCharacter->GetCharacterMovement()->GetCurrentAcceleration().Size() > 0.f ? true : false;
    27. }

    创建一个动画蓝图,进入将父类设置为刚刚写好的Shooter_Animlnstance

    设置动画状态和条件,框选的使用变量bisfalling,另外一个使用自动规则

     在跳跃结束和走路的状态切换条件使用动画剩余时间作为条件

    创建一个混合空间1D,将idle,walk,run的动画放入并设置轴。在待机状态中添加动画设置speed。将人物蓝图里的动画蓝图设置为新建的动画蓝图,人物走动时就有了动画

  • 相关阅读:
    编码器的原理以及在arduino中的使用
    【ES6】require、export和import的用法
    大语言模型助力审计问题自动定性
    Raiden Network(二)—— Mediated transfers(多跳支付里的中介传输)
    从构造方法到实战练习优先级队列 PriorityQueue
    C++教程(05)——数据类型
    代码随想录算法训练营第五十六天| 1143.最长公共子序列 、 1035.不相交的线 、53. 最大子序和 动态规划
    vue router
    Java中Callable和Future
    xgboost 与 lgbm
  • 原文地址:https://blog.csdn.net/szn1316159505/article/details/133904190