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

相关推荐
JustHappy5 小时前
古法编程秘籍(七):互联网到底是什么?把两台电脑怎么说话搞懂就够了
前端·后端·网络协议
snow@li5 小时前
SEO-文章标题:写文章时候,分类+主标题+大纲+解释 作为标题 / 不点进去也知道全文覆盖什么 / 标题即架构
前端
kyriewen6 小时前
Git Commit 前自动修复代码风格?配置 Husky + lint-staged,从此 CR 只聊逻辑
前端·git·面试
小和尚同志6 小时前
AI 自动化测试探索(一):Playwright MCP
前端·人工智能·aigc
老马识途2.07 小时前
在AI的帮助下理解spring的启动过程
java·前端·spring
徐小夕7 小时前
Loop Engineering 深度解析与实战指南(全网最全)
前端·算法·github
运筹vivo@7 小时前
Python ContextVar 底层机制与内存模型拆解
前端·数据库·python
#麻辣小龙虾#9 小时前
基于vue3.0开发一款【固废与废气运维管理系统】(支持源码)
前端·vue.js·vue3
Cosolar9 小时前
Docsify零构建文档站完全指南:从快速搭建到企业级部署
前端·开源·github
weixin_471383039 小时前
Taro-02-页面路由
前端·taro