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

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; // 角色落地后禁用二段跳
}

http://www.kler.cn/a/560268.html

相关文章:

  • DIP的实际举例
  • 垂类大模型微调(一):认识LLaMA-Factory
  • clickhouse--本地表和分布式表,副本机制,分片集群
  • DeepSeek-R1蒸馏模型与其他模型的区别
  • 【Linux知识】Linux上从源码编译到软件安装全过程详细说明
  • 冒泡排序:简单又易于实现的排序算法
  • 智能生成ER图工具。使用 SQL 生成 ER 图:让数据库设计更高效
  • C/C++高性能Web开发框架全解析:2025技术选型指南
  • 快手弹幕 websocket 分析
  • 用Deepseek直接在word中完成论文的润色(中-中,中-英, 英-中)
  • VantUI官网更新2025,移动端前端开发
  • Python在实际工作中的运用-CSV转XLSX的几个方法
  • 【多模态】46、通俗理解 RLHF/PPO/DPO/GRPO
  • Linux-SaltStack配置
  • Plantsimulation中机器人怎么通过阻塞角度设置旋转135°
  • 基于Python和Neo4j开发的医疗辅助诊断系统的详细实现步骤和代码示例
  • 网页制作08-html,css,javascript初认识のhtml使用框架结构,请先建立站点!
  • RocketMq\Kafka如何保障消息不丢失?
  • 腾讯云大模型知识引擎×DeepSeek赋能文旅
  • ssh被暴力访问了,怎么拦截ip