一个同步问题 问题的起因是我在做了这个调试UI后,某些情况下界面会抖。这个界面是我锁在角色脑袋上,所以应该是角色在抖。不开UI是看不出来的。应该是抖的很轻微。 后来我在这两篇文章找到了问题原因 在多人游戏中更新角色移动速度2 在多人游戏中更新角色移动速度1 一句话说明问题的原因: 前文我提到了我这样修改角色移动速度在网络环境下是有问题的 void ACwlCharacter::UpdateDyna…
数据驱动 这一部分的含义是角色在不同的运动状态下,比如旋转模式不同(瞄准状态,正常状态),步态不同(走,跑,冲刺),姿态不同(蹲伏,站立)应该有不同运动属性设置。 这里的属性包括,速度(MaxWalkSpeed),加速度(MaxAcceleration),减速度(BrakingDecelerationWalking),摩檫力(BrakingFriction),摩檫力系数(BrakingFricti…
先看一下这三个状态的枚举。主要是维护一些数据给动画蓝图用。 移动状态 MovememtState,前期只需要关注Ground和InAir 即可。Ground就是地面状态,InAir包括了空格键跳跃和前面没路了继续走的下落状态。 姿态 Stance。包括站立和蹲伏。 步态Gait。走,跑,冲刺三个状态。 UENUM(BlueprintType) enum class ECwlMovementStat…
我使用的动画资源。其实第一个就够 攀爬状态 打开角色运动组件,里面有一个默认陆地行走模式。改成custom自定义,然后再配合空的动画蓝图。运行后会发现角色动不了了。因为这里没有任何流程代码。 我们可以认为这个Custom状态就是现在的攀爬状态。 所以我们需要一个接口,进入和退出攀爬状态,就是设置上面的CharacterMovement 进入 MOVE_Custom 和 MOVE_Walking v…
打折的时候买了这个资产,纯蓝图项目,里面的飞行动画不错。逻辑也可以做一定的参考,直接接入进来。 初步实现 我希望在空中按shift进入飞行状态。 void ACwlBasePlayer::InputBeginSprint(const FInputActionValue& InputValue) { if (GetMovementState() == ECwlMovementState::I…
https://www.yuque.com/chenweilin-tryw7/rgw7vi/mnemuq
按键事件触发播放翻滚蒙太奇,调整姿态,是蹲伏还是站立。如果是站立需要蹲下再翻再起来 void ACwlAlsCharacterBase::OnRoll() { GetMyAnimInstance()->Montage_Play(GetRollMontage(), 1.13f); if (GetCurStance() == ECwlAlsStance::Standing) { DesiredS…
蹲伏和站立姿态的切换。 第一步是这样,蹲伏和站立的初始状态 然后开始加蹲伏与站立状态之间的切换 然后改成这样,前半段条件是stance的枚举 后半段是动画播放完毕, 注意切换播放速度是1.2,循环动画要去掉 然后如果我们蹲下马上切换站立,它会把蹲下过度播放完再起来,不太行 另一个问题是移动中蹲下会滑步 对于滑步的问题 如果运动中有移动,旋转,那么就取消播完动画再结束的条件。直接结束 然后是这一段也…
这一部分主要处理的是,前面我们有站立状态的八向运动,站立状态的静止和运动状态机。我们需要处理出蹲伏的版本。 老笔记 https://www.yuque.com/chenweilin-tryw7/rgw7vi/rnsmup
原地旋转 效果是,角色在静止的时候,并且是瞄准状态下。视角移动,角色会触发一个踏步动作然后旋转。 在Tick中如果是瞄准状态下 CanRotateInPlace() == true 触发RotateInPlaceCheck void UCwlBaseAnimIns::UpdateGroundValues() { bShouldMove = CheckCanMove(); if (IsFromSto…