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

UE5实现角色二段跳

1.二段跳

        首先如果不想使用UE中增强输入功能,可以在SetupPlayerInputComponent函数中绑定对应的操作,具体可以自行查找。如果使用增强输入,可以通过创建一个UE自带的第三人称模板C++项目学习,假设当前项目是创建自UE第三人称模板项目。

        实现,重写Jump,StopJumping,Landed函数 , StopJumping会在Jump函数执行后会立即执行,Landed函数会在角色落地后执行,我没有完善角色的二段跳动画,如果想完善可以在跳跃动作的状态机(statemachine)拉出一个新的状态,这个状态是二段跳的状态,状态的动画是二段跳动画。

// h
/** 当前角色跳跃 */
virtual void Jump() override;
	
/** 当前角色停止跳跃 */
virtual void StopJumping() override;

/** 当前角色着陆 */
virtual void Landed(const FHitResult& Hit) override;

UPROPERTY(VisibleAnywhere, Category = "Jump")
bool bCanDoubleJump; // 是否可以进行二段跳

UPROPERTY(VisibleAnywhere, Category = "Jump")
float DoubleJumpZVelocity; // 二段跳的垂直速度

// cpp
AJumpCharacter::AJumpCharacter()
{
    // 构造函数中初始化
	bCanDoubleJump = false;

	DoubleJumpZVelocity = 1000.f;  // 可根据需要调整
}

void AJumpCharacter::Jump()
{
	// 如果角色能够跳跃,执行第一次跳跃
	//UE_LOG(LogTemp, Warning, TEXT("jump"));

	if (CanJump())
	{
		Super::Jump();
		bCanDoubleJump = true; // 允许进行二段跳
		//UE_LOG(LogTemp, Warning, TEXT("first jump"));
	}
	else if (bCanDoubleJump)
	{
		// 如果可以二段跳,进行二段跳
		//UE_LOG(LogTemp , Warning , TEXT("second jump"));
		FVector JumpVelocity = FVector(0.f, 0.f, DoubleJumpZVelocity);
		GetCharacterMovement()->Launch(FVector(0.f, 0.f, DoubleJumpZVelocity));
		bCanDoubleJump = false; // 禁用二段跳
	}
}

void AJumpCharacter::StopJumping()
{
	Super::StopJumping();
	//UE_LOG(LogTemp , Warning , TEXT("StopJumping"));
	//bCanDoubleJump = false;  // 重置二段跳状态
}

void AJumpCharacter::Landed(const FHitResult& Hit)
{
	Super::Landed(Hit);
	//UE_LOG(LogTemp, Warning, TEXT("Landed"));
	bCanDoubleJump = false; // 角色落地后禁用二段跳
}

相关文章:

  • deepseek_清华大学指导手册_pdf_1-5
  • C#基础:类的三大特性 之 封装
  • C++ ——— 模拟实现 AVL 树的插入
  • Win10配置VSCode的C/C++编译环境
  • 前后端分离系统架构:基于Spring Boot的最佳实践
  • 基于AT89C52单片机的出租车计价器
  • 【Linux进程一】进程的概念
  • CUDA专题1:CUDA介绍
  • Docker启动ES容器打包本地镜像
  • 基于RISC-V内核完全自主可控国产化MCU芯片
  • Shell脚本和Bat脚本区别
  • 我的世界地下城DLC开发的第二天
  • 第9章:LangChain结构化输出-示例2(数字提取服务)
  • 公开整理-最新中国城市统计NJExcel+PDF版本(1985-2024年)
  • B. Skibidus and Ohio
  • DeepSheek 本地部署
  • Service Worker 实现离线应用思路
  • 简识Kafka集群与RocketMQ集群的核心区别
  • 网络安全研究
  • 在运维工作中,磁盘文件满了,怎么办?
  • 定西市城乡建设局网站/网络推广的方法有多选题
  • 做网站的工具/品牌传播策划方案
  • 购物网站首页界面设计/免费论坛建站系统
  • 内江市网站建设/长沙哪里有网站推广优化
  • 苏州公司网站建设服务/西安关键词优化排名
  • 临朐网站建设咨询/厦门网