当前位置: 首页 > 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.当前只加入了一个动画,剩下的还没学到 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 派森学长带你学python—集合
  • 爬虫 Web Js 逆向:RPC 远程调用获取加密参数(1)WebSocket 协议介绍
  • C++简单界面设计
  • 【初阶数据结构】通讯录项目(可用作课程设计)
  • 突破传统看车局限,3DCAT实时云渲染为东风日产奇骏赋能
  • Django 安装指南
  • ui自动化难点
  • UE5学习笔记9-创建一个小窗口提示人物是否和武器重叠
  • 【人工智能】Transformers之Pipeline(十):视频分类(video-classification)
  • C语言常用的数据结构
  • Python | Leetcode Python题解之第331题验证二叉树的前序序列化
  • PPPoE基础笔记
  • String 事务
  • 大模型面试系列-大模型算法工程师的面试题目与解答技巧详细说明
  • 安美数字酒店宽带运营系统 weather.php 任意文件读取漏洞复现
  • JavaScript中的对象个人分享
  • Linux快速复制或删除大量小文件
  • Redis字符串类型内部编码剖析
  • Service Worker
  • spring cloud gateway 源码解析(4)跨域问题处理
  • Vue 动态创建 component
  • Vue实战(四)登录/注册页的实现
  • 闭包,sync使用细节
  • 短视频宝贝=慢?阿里巴巴工程师这样秒开短视频
  • 基于web的全景—— Pannellum小试
  • 树莓派 - 使用须知
  • 腾讯视频格式如何转换成mp4 将下载的qlv文件转换成mp4的方法
  • 推荐一款sublime text 3 支持JSX和es201x 代码格式化的插件
  • 无服务器化是企业 IT 架构的未来吗?
  • 协程
  • 新版博客前端前瞻
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • 东超科技获得千万级Pre-A轮融资,投资方为中科创星 ...
  • # AI产品经理的自我修养:既懂用户,更懂技术!
  • # 数据结构
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • $nextTick的使用场景介绍
  • (附源码)springboot建达集团公司平台 毕业设计 141538
  • (每日一问)基础知识:堆与栈的区别
  • (十八)SpringBoot之发送QQ邮件
  • (一)认识微服务
  • (转)EXC_BREAKPOINT僵尸错误
  • (转)树状数组
  • .NET CF命令行调试器MDbg入门(一)
  • .Net Core webapi RestFul 统一接口数据返回格式
  • .net core 源码_ASP.NET Core之Identity源码学习
  • .NET Core、DNX、DNU、DNVM、MVC6学习资料
  • .Net 执行Linux下多行shell命令方法
  • .NET正则基础之——正则委托
  • .NET值类型变量“活”在哪?
  • /*在DataTable中更新、删除数据*/
  • ??Nginx实现会话保持_Nginx会话保持与Redis的结合_Nginx实现四层负载均衡
  • @软考考生,这份软考高分攻略你须知道
  • [ vulhub漏洞复现篇 ] Apache APISIX 默认密钥漏洞 CVE-2020-13945
  • [000-01-018].第3节:Linux环境下ElasticSearch环境搭建