当前位置: 首页 > news >正文

UE5学习笔记11-为拿取武器添加动画

一、一点说明

        动画实例通过扩展为所有机器上的每个字符都存在动画蓝图,动画实例只能访问该计算机上的变量。

二、思路

        我在武器组件中有一个武器类的指针,判断当前指针是否为空去判断当前角色是否装备武器

三、实现

        1.在角色C++类中添加是否装备武器的函数,功能是判断角色是否装备武器,在角色类中添加这个函数是因为我将武器组件的类指针定义在了角色的头文件中

//H
bool IsWeaonEquipped();//CPP
bool ABlasterCharacter::IsWeaonEquipped()
{/** 判断是否有武器组件部分Combat 判断Combat->EquippedWeapon指针是否存在 */return (Combat && Combat->EquippedWeapon);
}

        2.在角色动画的C++类中添加一个变量,属性是 蓝图只读 类型是Character 允许私有访问,在更新动画的重写的虚函数中将变量赋值

//H
UPROPERTY(BlueprintReadOnly, Category = Character, meta = (AllowPrivateAccess = "true"))/** 蓝图只读 类型是Character 允许私有访问 */
bool bWeaponEquipped;//CPP
void UBlasterAnimInstance::NativeUpdateAnimation(float DeltaTime)
{Super::NativeUpdateAnimation(DeltaTime);/** add by begin 之前的代码可以不用参考 *//* 判断当前角色是否为空 为空获得当前角色当作第一帧 */if (BlasterCharacter == nullptr){BlasterCharacter = Cast<ABlasterCharacter>(TryGetPawnOwner());}if (BlasterCharacter == nullptr)return;/* 只想获得平面上xy的速度的向量,将z方向的速度置为0 */FVector Velocity = BlasterCharacter->GetVelocity();Velocity.Z = 0.f;/* 获得速度的向量 */Speed = Velocity.Size();bIsInAir = BlasterCharacter->GetCharacterMovement()->IsFalling(); /** IsFalling()判断是否在空中 GetCharacterMovement()获得人物移动 */bIsAccelerating = BlasterCharacter->GetCharacterMovement()->GetCurrentAcceleration().Size() > 0.f ? true : false;
/** add by end 之前的代码可以不用参考 *//* 获得是否装备武器 */bWeaponEquipped = BlasterCharacter->IsWeaonEquipped();
}

         3.在武器组件的类中将武器类指针属性设置为可复制,重写virtual void GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& OutLifetimeProps) const override;函数注册REP变量

// H
UPROPERTY(Replicated)
AWeapon* EquippedWeapon;/** 要标记要复制的内容,我们使用 UPROPERTY 中的 Replicated 说明符。
在将某个内容标记为 Replicated 之后,我们必须定义一个名为 GetLifetimeReplicatedProps 的新函数 */
/** 返回用于网络复制的属性,这需要被所有具有本机复制属性的 actor 类覆盖 */
virtual void GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& OutLifetimeProps) const override;// CPP
#include "Net/UnrealNetwork.h"void UCombatComponent::GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& OutLifetimeProps) const
{Super::GetLifetimeReplicatedProps(OutLifetimeProps);/** 指定了具有复制变量的类 和 复制的变量是哪个  */DOREPLIFETIME(UCombatComponent, EquippedWeapon);
}

四、蓝图实现

        1.打开角色动画蓝图

        2.在空白处右键选择如图

        3. 如图

        4.如图 

        5.如图,创建新的状态机,这个状态机是装备武器后的状态的状态机

        6.如图双击状态机,如图拖拽一个动画如图

        7.编译保存,可以尝试运行

        8.当前只加入了一个动画,剩下的还没学到 

http://www.lryc.cn/news/424251.html

相关文章:

  • 68. 文本左右对齐【 力扣(LeetCode) 】
  • 【中等】 猿人学web第一届 第6题 js混淆-回溯
  • 低、中、高频率段具体在不同应用中的范围是多少
  • Oxford Model600 Model400低温氦压缩机cryogenic helium compressor手侧
  • Golang面试题四(并发编程)
  • 计算机学生高效记录并整理编程学习笔记的方法
  • 【书生大模型实战】L2-LMDeploy 量化部署实践闯关任务
  • 《编程学习笔记之道:构建知识宝库的秘诀》
  • DETR论文,基于transformer的目标检测网络 DETR:End-to-End Object Detection with Transformers
  • untiy有渲染线程和逻辑线程嘛
  • 什么是数据仓库ODS层?为什么需要ODS层?
  • permutation sequence(
  • PCL 三线性插值
  • JVM虚拟机(一)介绍、JVM内存模型、JAVA内存模型,堆区、虚拟机栈、本地方法栈、方法区、常量池
  • Python利用xlrd复制一个Excel中的sheet保留原格式创建一个副本(注:xlrd只能读取xls)
  • 40、Python之面向对象:扩展的对象属性解析顺序(描述符 + MRO)
  • stm32—时钟、定时器和看门狗
  • Windows平台RTSP|RTMP播放器如何实时调节音量
  • Leetcode JAVA刷刷站(10)正则表达式匹配
  • 合并图片为pdf
  • 【Linux Install】Ubuntu20, Windows10 双系统安装
  • Keepalived + LVS实现高可用
  • Gin框架接入Prometheus,grafana辅助pprof检测内存泄露
  • 上海凯泉泵业入职测评北森题库题型分析、备考题库、高分攻略
  • Linux:基础IO
  • 奥运奖牌窥视
  • RUST实现远程操作电脑手机
  • spring01-spring容器启动过程分析
  • RAG与LLM原理及实践(12)--- Milvus RRFRanker的使用场景及源码分析
  • Nginx与Tomcat的区别