角色动作——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

相关推荐
Lkstar15 分钟前
Vue keep-alive 原理全解:LRU 缓存策略、源码级理解
前端·vue.js·面试
会联营的陆逊16 分钟前
html2canvas 1.4.1 在 iOS Safari 中生成图片卡住的问题排查与修复
前端
ZC跨境爬虫39 分钟前
跟着 MDN 学CSS day_13 :(深入理解CSS中的元素尺寸调整)
前端·javascript·css·ui·html·tensorflow
threelab1 小时前
Three.js 加载 3D Tiles 瓦片数据 | 三维可视化 / AI 提示词
开发语言·前端·javascript·人工智能·3d·着色器
百度地图开放平台1 小时前
我用百度地图 Skills 体系重构了物流调度系统,节省了 90% 的人力
前端·github
JavaAgent架构师1 小时前
前端AI工程化(九):AI Agent平台前端架构设计
前端·人工智能
梦想CAD控件2 小时前
网页端对DWG图纸进行预览与批注(CAD轻量化)
java·前端·javascript
不吃土豆的马铃薯3 小时前
Spdlog 进阶:日志基本控制、日志格式控制、异步记录器
linux·服务器·开发语言·前端·c++
wait3 小时前
Vibe Coding 开发技巧
前端·javascript·人工智能
ZengLiangYi3 小时前
Vercel AI SDK 入门:一行代码切换 LLM Provider
前端·javascript·aigc