首页 > 其他分享 >UE5学习笔记12-为角色添加蹲下的动作

UE5学习笔记12-为角色添加蹲下的动作

时间:2024-08-12 21:53:15浏览次数:8  
标签:12 ABlasterCharacter bIsCrouched BlasterCharacter PlayerInputComponent UE5 蹲伏 蹲下

一、一点说明

        1.蹲下使用了ACharacter类中Crouch();函数,函数功能是先检查是否存在运动组件,将bool类型的变量变为true,该变量代表是想要蹲下。

 

         2.通过源码可知存在是否蹲下的bool变量bIsCrouched如图,如果对:1有疑问请搜索C++位域

二、代码实现

        1.添加动作映射

 

        2.添加回调函数,在函数SetupPlayerInputComponent绑定对应回调函数

//H
void CrouchButtonPressed();

//CPP
void ABlasterCharacter::CrouchButtonPressed()
{
	/* 调用ACharacter中的蹲下功能 */
	if (bIsCrouched)
    {
	    UnCrouch();
    }
    else
    {
    	Crouch();
    }
}

void ABlasterCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{
	Super::SetupPlayerInputComponent(PlayerInputComponent);

	/* 绑定动作映射 */
	PlayerInputComponent->BindAction("Jump", IE_Pressed, this, &ACharacter::Jump);/* 具有一个输入的事件IE_Pressed */
	PlayerInputComponent->BindAction("Equip", IE_Pressed, this, &ABlasterCharacter::EquipButtonPressed);
	PlayerInputComponent->BindAction("Crouch", IE_Pressed, this, &ABlasterCharacter::CrouchButtonPressed);
	/* 绑定轴映射 */
	PlayerInputComponent->BindAxis("MoveForward",this,&ABlasterCharacter::MoveForward);
	PlayerInputComponent->BindAxis("MoveRight", this, &ABlasterCharacter::MoveRight);
	PlayerInputComponent->BindAxis("Turn", this, &ABlasterCharacter::Turn);
	PlayerInputComponent->BindAxis("LookUp", this, &ABlasterCharacter::LookUp);
}

        3.在动画类中添加变量如图代码如图BlasterCharacter->bIsCrouched中bIsCrouched是public的bool变量可以直接判断

//H
UPROPERTY(BlueprintReadOnly, Category = Character, meta = (AllowPrivateAccess = "true"))/** 蓝图只读 类型是Character 允许私有访问 */
bool bIsCrouched;

//CPP
void UBlasterAnimInstance::NativeUpdateAnimation(float DeltaTime)
{
	Super::NativeUpdateAnimation(DeltaTime);

	/* 判断当前角色是否为空 为空获得当前角色当作第一帧 */
	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;

	/* 获得是否装备武器 */
	bWeaponEquipped = BlasterCharacter->IsWeaonEquipped();
	/* 获得是否蹲下的bool值 */
	bIsCrouched = BlasterCharacter->bIsCrouched;
}

 三、蓝图实现

        1.打开动画蓝图,选择对应的动画如图

         2.双击左侧的箭头,添加如图所示

        3.双击右侧的箭头,添加如图所示

 

         4.编译保存

        5.打开角色蓝图点击角色移动(在左侧可以找到)在右侧角色移动的细节栏中将可蹲伏勾选如图

        6.上图的蹲伏半高是由于蹲下时会更改角色胶囊的大小,蹲伏半高可以限制高度,同理最大蹲伏行走速度是在蹲下是的移动速度

        7.代码中设置可蹲伏,可以在角色的构造函数中添加如下语句和上图的勾选效果一样,如果单独设置某一个没起作用,可以尝试两个一个设置

/* 获得运动组件将设置为可以蹲伏,该设置和在角色蓝图中在角色移动的细节栏中将可蹲伏(中文) isCrouch(英文)选项打√效果一样 */
GetMovementComponent()->NavAgentProps.bCanCrouch = true;

标签:12,ABlasterCharacter,bIsCrouched,BlasterCharacter,PlayerInputComponent,UE5,蹲伏,蹲下
From: https://blog.csdn.net/m0_53219246/article/details/141142328

相关文章

  • 2024.8.12
    ###2024.8.12【梦最让我费解的地方在于,明明你看不清梦里人们的脸,却清晰地知道他们是谁。】###Monday七月初九---##序理论###最小链覆盖&最长反链长度我们设定一个二元关系符R和一个集合A我们设定<a,r>这样一个类群,那么对于任意$a_i\inA,a_j\inA$,二元关系式$a......
  • 高级java每日一道面试题-2024年8月12日-设计模式篇-请列举出在JDK中几个常用的设计模
    如果有遗漏,评论区告诉我进行补充面试官:请列举出在JDK中几个常用的设计模式?我回答:在JavaDevelopmentKit(JDK)中,许多设计模式被广泛使用,以帮助实现软件的结构、行为和复用。下面是一些在JDK中常见的设计模式及其简要说明:工厂模式(FactoryPattern)JDK中的java......
  • 代码随想录Day12
    二叉树遍历分为前序、中序、后续、层序四种其中前中后序属于深度优先搜索,层序属于广度优先搜索前序遍历顺序:根节点->左子树->右子树中序遍历顺序:左子树->根节点->右子树后序遍历顺序:左子树->右子树->根节点不难发现,前中后其实就是根节点在遍历中的位置至于层序遍历,顾名......
  • 【闲话】08.12.24
    0812闲话头图:今日推歌:《苦若吞沙feat.诗岸》Zeno来吧bababalala旋转着眩晕着拥抱着过去的那一切全都bababalala只剩下空气还哭泣着来吧bababalala奔跑着跌倒了泥泞的用力的把一切全都bababalala只剩下我还在等什么太符合心境了有点不知......
  • 每日AI必读资讯 2024-08-12
    原文链接:https://blog.csdn.net/m0_46163918/article/details/14111374601黑匣子被打开了!能玩的Transformer可视化解释工具:TransformerExplainer佐治亚理工学院和IBM研究院开发一款基于web的开源交互式可视化工具「TransformerExplainer」,帮助非专业人士了解Transfor......
  • 12.无语义标签,字符实体
    一.无语义布局标签 顾名思义,这个标签就是单纯用来划分区域布局,并没有什么功能,有<div>还有<span>标签,<div>标签独占一行,<span>标签则不换行<div>这是div</div><div>这是div</div><span>这是span标签</span><span>这是span标签</span>这就是这两个标签的效果,先知......
  • 24/8/12 模拟赛
    hz暑假集训8/12数字三角形CF1517C签到题。题意:小\(D\)给你一个长度为\(n\)的排列\(p\),你需要根据\(p\)构造出一个三角形。该图案需要满足共\(n\)行,第\(i\)行有\(i\)个数,第\(i\)行最后一个数是\(p_i\)。数值\(p_i\)有\(p_i\)个且四联通。几个位置是......
  • UE5学习笔记9-创建一个小窗口提示人物是否和武器重叠
    一、目标    创建一个UsrWidget去显示如果人物和武器重叠显示窗口,如果人物和武器不重叠将窗口隐藏二、创建窗口并显示    1.创建一个窗口蓝图类,命名为PickUpWidget,这个蓝图类不需要C++类,在对应文件夹中单机右键选择用户界面的控件蓝图    2.在界......
  • 报错:2024-08-12T18:39:35.313+08:00 ERROR 29668 --- [demo2] [ main] o.s.
    org.springframework.beans.factory.BeanDefinitionStoreException:Failedtoparseconfigurationclass[com.example.demo.DemoApplication]atorg.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:179)~[spring-con......
  • 124. 项目74:简易句子结构分析器——《跟老吕学Python·新手》
    124.项目74:简易句子结构分析器——《跟老吕学Python·新手》124.项目74:简易句子结构分析器124.1目标124.2功能124.3设计124.4实现步骤124.5代码实现124.6测试124.7注意事项124.8小结124.项目74:简易句子结构分析器124.1目标开发一个......