土狼时间
人物在地面/平台边缘即将掉落的时候,仍有机会进行跳跃动作;
其原理是:在人物掉落判定时开始计时,在设置的土狼时间内,可以按键跳跃。
- 新建一个状态脚本PlayerState_CoyoteTime,大部分代码可复制PlayerState_Run。
- 从RUN状态转向CoyoteTime,首先关闭刚体重力(需要在PlayerController脚本中添加方法获取参数),使角色在空中保持一段时间。状态结束再开启刚体重力。
- 其中包含的下落状态处理逻辑,因此可以将PlayerState_Run中浮空切换下落状态改为切换为PlayerState_CoyoteTime
PlayerState_CoyoteTime.cs代码
using System.Collections; using System.Collections.Generic; using UnityEngine;
[CreateAssetMenu(menuName = "Data/StateMachine/PlayerState/CoyoteTime", fileName = "PlayerState_CoyoteTime")] public class PlayerState_CoyoteTime : PlayerState { [SerializeField] float runSpeed = 5f; [SerializeField] float coyoteTime = 0.1f; public override void Enter() { base.Enter(); player.SetUseGravity(false); } public override void Exit() { player.SetUseGravity(true); } public override void LogicUpdate() { if (input.playerjump) { stateMachine.SwitchState(typeof(PlayerState_JumpUp)); } if (StateDuration > coyoteTime || !input.PlayerMove) { stateMachine.SwitchState(typeof(PlayerState_Fall)); } } public override void PhysicUpdate() { player.Move(runSpeed); } }
|
PlayerController中新加的函数
public void SetUseGravity(bool value) { rigidBody.useGravity = value; }
|
PlayerState_Run中修改后的内容
if (!player.IsGrounded) { stateMachine.SwitchState(typeof(PlayerState_CoyoteTime)); }
|