UE5实现角色二段跳

1.二段跳

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

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

cpp 复制代码
// 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; // 角色落地后禁用二段跳
}
相关推荐
吴梓穆3 天前
UE5 UI WarpBox 包裹框
ue5
脑壳疼___3 天前
vue3与ue5通信-工具类
前端·javascript·ue5
CG_MAGIC4 天前
虚幻 5 与 3D 软件的协作:实时渲染,所见所得
3d·ue5·游戏引擎·图形渲染·虚幻·游戏美术·渲云渲染
零一数创4 天前
数字孪生赋能智慧能源电力传输管理新模式
ue5·能源·数字孪生·ue·智慧能源·零一数创
零一数创4 天前
智慧能源驱动数字孪生重介选煤新模式探索
人工智能·ue5·能源·数字孪生·ue·零一数创
不爱说话的采儿5 天前
UE5保姆级基础教程(第五章)
经验分享·其他·ue5·游戏引擎·课程设计
幻雨様5 天前
UE5多人MOBA+GAS 26、为角色添加每秒回血回蓝(番外:添加到UI上)
java·ui·ue5
幻雨様5 天前
UE5多人MOBA+GAS 27、死亡被动(用于作为击杀奖励,爆金币和是增加经验)
java·服务器·ue5
开发游戏的老王5 天前
[BUG]关于UE5.6编译时出现“Microsoft.MakeFile.Targets(44,5): Error MSB3073”问题的解决
c++·ue5·bug·虚幻·虚幻5·gas
右弦GISer5 天前
【UE5医学影像可视化】读取dicom数据生成2D纹理并显示
ue5·dicom