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

相关推荐
pingan878721 分钟前
试试 docx.js 一键生成 Word 文档,效果很不错
开发语言·前端·javascript·ecmascript·word
张一凡9330 分钟前
重新理解 React 状态管理:用类的方式思考业务
前端·react.js
结网的兔子1 小时前
前端学习笔记——Element Plus 栅格布局系统示例
前端·javascript·css
l1t2 小时前
DeepSeek总结的用 C# 构建 DuckDB 插件说明
前端·数据库·c#·插件·duckdb
泯泷2 小时前
从零构建寄存器式 JSVMP:实战教程导读
前端·javascript·算法
开源盛世!!2 小时前
3.19-3.21
linux·服务器·前端
必胜刻2 小时前
AJAX 请求理解
前端·ajax·okhttp·前后端交互
小民AI实战笔记2 小时前
NVM实战指南:高效管理你的Node.js环境
前端·node.js
www_stdio2 小时前
前端异步核心:Promise 从入门到吃透
前端
朱建伟2 小时前
大神尤雨溪再次出手,前端工具链整合--该文章是对vite plus官方README文档进行了翻译
前端·vite