抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

土狼时间

人物在地面/平台边缘即将掉落的时候,仍有机会进行跳跃动作;

其原理是:在人物掉落判定时开始计时,在设置的土狼时间内,可以按键跳跃。

  • 新建一个状态脚本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));
}

评论