public override void Update(PlayerFSMSystem player) { if (Mathf.Abs(player.xVelocity) < 0.001) { TransitionOtherState(parentState, parentState.crouchIdleState, player); } }
public override void Update(PlayerFSMSystem player) { if (Mathf.Abs(player.yVelocity) < 0.01) { TransitionOtherState(parentState, parentState.hangWallState, player); } }
/// <summary> /// 重置方法,默认都执行 /// </summary> /// <param name="state"></param> /// <param name="player"></param> public void TransitionState(PlayerBaseState state, PlayerFSMSystem player) { // Debug.Log(currentState.name + "====>" + state.name); currentState?.Exit(player); // 如果为空则不执行 currentState = state; currentState?.Enter(player); }
public override void Exit(PlayerFSMSystem player) { currentState.Exit(player); // player.inTheAir = false; inTheAirEvent.UpdateState(false); // 站在时有摩擦 player.rb.sharedMaterial = player.hasFriction; }
public override void FixedUpdate(PlayerFSMSystem player) { // 在空中也可以移动 player.rb.velocity = new Vector2(player.xVelocity * (player.speed / player.jumpSleepDivisor), player.rb.velocity.y); currentState.FixedUpdate(player); }
/// <summary> /// 在入口点重置当前状态 /// </summary> /// <param name="player"></param> public override void Enter(PlayerFSMSystem player) { // 只有按下 Jump 进入的状态才需要进入跳跃(注意这个 GetButtonDown 是获取的同一帧的是否按下) TransitionState(jumpState, player, Input.GetButtonDown("Jump"), true); //player.inTheAir = true; inTheAirEvent.UpdateState(true); // 跳跃时无摩擦 player.rb.sharedMaterial = player.noFriction; }
public override void Enter(PlayerFSMSystem player) { // 先跳跃 if (player != null) { player.rb.AddForce( new Vector2(0f, player.jumpForce / player.jump2ForceDivisor), ForceMode2D.Impulse); } }
public override void Update(PlayerFSMSystem player) { if (Input.GetButtonDown("Jump") && jumpNumber > 0) { TransitionOtherState(parentSate, parentSate.jump2State, player); } jumpNumber++; }
private int jumpNumber; // 跳跃次数,避免第一次就切换到二段跳了 public override void Enter(PlayerFSMSystem player) { jumpNumber = 0; // 先跳跃 if (player != null) { player.rb.AddForce(new Vector2(0f, player.jumpForce), ForceMode2D.Impulse); } }
public override void Update(PlayerFSMSystem player) { if (!Input.GetButton("Crouch") && isTopEmpty) { TransitionOtherState(parentSate, parentSate.onStandState, player); return; } currentState.Update(player); }
public override void Update(PlayerFSMSystem player) { // 一只脚着地无法蹲下 if (Input.GetButton("Crouch") && !isHalfFoot) { TransitionOtherState(parentSate, parentSate.onCrouchState, player); return; } currentState.Update(player); }
/// <summary> /// 在入口点重置当前状态 /// </summary> /// <param name="player"></param> public override void Exit(PlayerFSMSystem player) { // 改回当前角色的碰撞盒大小 /* player.coll.size = colliderStandSize; * player.coll.offset = colliderStandOffset;*/ // player.isCrouching = false; isCrouchingEvent.UpdateState(false); currentState.Exit(player); }
public override void Update(PlayerFSMSystem player) { if (Mathf.Abs(player.xVelocity) < 0.001) { TransitionOtherState(parentState, parentState.idleState, player); } if (Input.GetButton("Run")) { TransitionOtherState(parentState, parentState.runState, player); } }
/// <summary> /// /// </summary> /// <param name="state"></param> /// <param name="player"></param> /// <param name="executeEnter">是否执行 Enter</param> /// <param name="executeExit">是否执行 Exit</param> public void TransitionState(PlayerBaseState state, PlayerFSMSystem player, bool executeEnter, bool executeExit) { if (executeExit) { currentState?.Exit(player); } currentState = state; if (executeEnter) { currentState?.Enter(player); // 如果为空则不执行 } }
public override void Update(PlayerFSMSystem player) { currentState.Update(player); // 如果跳跃 if (Input.GetButtonDown("Jump")) { player.rb.bodyType = RigidbodyType2D.Dynamic; player.rb.AddForce( // 这个 transform.localScale.x 用于判断方向 new Vector2(-player.climbLateralForce * player.transform.localScale.x, player.jumpForce), ForceMode2D.Impulse); } }
public override void FixedUpdate(PlayerFSMSystem player) { if (isOnGround && player.yVelocity < 0) { return; } if (isHeadWall && player.yVelocity > 0) { return; } player.transform.position = new Vector2(player.transform.position.x, player.transform.position.y + player.climbSpeed * player.yVelocity); }
/// <summary> /// 在入口点重置当前状态 /// </summary> /// <param name="player"></param> public override void Enter(PlayerFSMSystem player) { if (!isInit) { /*colliderStandSize = player.coll.size; * colliderStandOffset = player.coll.offset; // 实际就是中心点 * colliderCrouchSize = new Vector2(player.coll.size.x, player.coll.size.y / 2); * colliderCrouchOffset = * new Vector2(player.coll.offset.x, player.coll.offset.y + (player.coll.offset.y / 2));*/ isInit = true; } TransitionState(crouchIdleState, player); /*// 修改当前角色的碰撞盒大小 * player.coll.size = colliderCrouchSize; * player.coll.offset = colliderCrouchOffset;*/ // player.isCrouching = true; isCrouchingEvent.UpdateState(true); }
public abstract void FixedUpdate(PlayerFSMSystem player);
/// <summary> /// 设置其它对象的状态 /// </summary> /// <param name="target">被设置状态的目标</param> /// <param name="state"></param> /// <param name="player"></param> /// <param name="executeEnter"></param> /// <param name="executeExit"></param> public void TransitionOtherState(PlayerBaseState target, PlayerBaseState state, PlayerFSMSystem player, bool executeEnter, bool executeExit) { target.TransitionState(state, player, executeEnter, executeExit); }
/// <summary> /// 设置其它对象的状态 /// </summary> /// <param name="target">被设置状态的目标</param> /// <param name="state"></param> /// <param name="player"></param> public void TransitionOtherState(PlayerBaseState target, PlayerBaseState state, PlayerFSMSystem player) { target.TransitionState(state, player); }
public override void Exit(PlayerFSMSystem player) { jumpNumber = 0; }
public override void FixedUpdate(PlayerFSMSystem player) { // Debug.Log("当前是 Jump 状态"); }
public override void FixedUpdate(PlayerFSMSystem player) { }
public override void Exit(PlayerFSMSystem player) { player.rb.bodyType = RigidbodyType2D.Dynamic; currentState.Exit(player); }
/// <summary> /// 新状态的入口点,例如切换新状态前需要修改角色的动画 /// </summary> /// <param name="player">可能为空</param> public virtual void Enter(PlayerFSMSystem player) { }
public override void Enter(PlayerFSMSystem player) { player.rb.bodyType = RigidbodyType2D.Static; //player.rb.bodyType = RigidbodyType2D.Kinematic; TransitionState(hangWallState, player); }
/// <summary> /// 在离开现有状态,转换到新状态之前调用的方法。 /// </summary> /// <param name="player">可能为空</param> public virtual void Exit(PlayerFSMSystem player) { }
public override void FixedUpdate(PlayerFSMSystem player) { player.rb.velocity = new Vector2(player.xVelocity * (player.speed / player.crouchSpeedDivisor), player.rb.velocity.y); }
public override void FixedUpdate(PlayerFSMSystem player) { player.rb.velocity = new Vector2(player.xVelocity * player.speed, player.rb.velocity.y); }
public override void Update(PlayerFSMSystem player) { currentState.Update(player); }