角色动作——Equip, Crouch, Aim (2)

写在前面

Crouch 即蹲下, 是FPS游戏里的另一个重要动作。

角色下蹲,同时还意味着角色的碰撞体积也变小,但是好消息是,Character类已经给了我们现成的Crouch函数和UnCrouch函数了,不仅如此,它还提供了bIsCrouched状态位来告诉我们角色是否是Crouched状态,同时,这个状态做到了服务器和客户端同步,代表我们不需要额外去Replicated它了。

注意,这不仅意味着,在服务端到客户端不需要复制,从客户端1到服务端再到客户端也无需再复制,做全套了。这是不是有点像角色的移动呢,角色在客户端的移动也是多端同步的毕竟。

确定Crouch标志

首先我们先在AnimeInstance里面写上标志位:

c++ 复制代码
// header
// 是否在Crouch
UPROPERTY(BlueprintReadOnly, Category = Character, meta = (AllowPrivateAccess = "true"))
bool bIsCrouched;


// c++
bIsCrouched = BlasterCharacter->bIsCrouched; // 是否在Crouch

而在BlasterCharacter里,我们需要做两件事,一件是按键绑定,第二件是让角色开启CanCrouch

c++ 复制代码
// header
void Crouch();
void UnCrouch();


// cpp
// Sets default values
ABlasterCharacter::ABlasterCharacter()
{
  // ...

	// 设置让角色可以Crouch
	this->GetMovementComponent()->NavAgentProps.bCanCrouch = true;
}


// Called to bind functionality to input
void ABlasterCharacter::SetupPlayerInputComponent(UInputComponent *PlayerInputComponent)
{
	Super::SetupPlayerInputComponent(PlayerInputComponent);

   // ...
   // 按下键位 开始Crouch
	PlayerInputComponent->BindAction("Crouch", IE_Pressed, this, &ThisClass::Crouch);
   // 松开键位 开始Crouch
	PlayerInputComponent->BindAction("Crouch", IE_Released, this, &ThisClass::UnCrouch);
}

完成了。

动画蓝图

和之前的动作不同,Crouch动作无需再左右倾斜,所以只要有一个方向Direction即可。

我们先做1D Blend Space,

左右不分很简单,其实只要看看你的preview的方向和角色运动的方向是不是一样就可以了。

Idle -> Crouch Walk

Crouch Walk -> Idle

END

相关推荐
我命由我123453 小时前
CesiumJS 笔记 - 获取容器中心点、Cartesian3 clone 方法、修改 Cartesian3 对象的高度
前端·javascript·css·前端框架·html·html5·js
Hopebearer_4 小时前
页面突然只剩 DOM?一次静态资源版本错配排查
前端·部署
东风破_5 小时前
ESLint 是什么?为什么你的项目需要它?
前端·后端·代码规范
圣殿骑士-Khtangc6 小时前
Go字符串高效拼接性能对比与底层原理分析
服务器·前端·golang
BigTopOne7 小时前
【ijkplayer】 硬解码流程
前端
kyriewen8 小时前
DeepSeek Harness开源第一天我就上手了——和Claude Code的差距比想象中大
前端·ai编程·deepseek
捡田螺的小男孩8 小时前
什么是 Skill?手把手带你写一个简单有用的 Skill!
前端·后端·程序员
IT_陈寒8 小时前
Redis集群这个坑,差点让我通宵
前端·人工智能·后端
90后的晨仔8 小时前
uni-app 路由跳转与页面导航 —— 终极详解(对标 iOS / Android / 鸿蒙三端原生)
前端
Heo9 小时前
大厂前端调试不能只会debugger
前端·javascript·面试