Пример #1
0
 public override void Update(PlayerFSMSystem player)
 {
     if (Mathf.Abs(player.xVelocity) < 0.001)
     {
         TransitionOtherState(parentState, parentState.crouchIdleState, player);
     }
 }
Пример #2
0
 public override void Update(PlayerFSMSystem player)
 {
     if (Mathf.Abs(player.yVelocity) < 0.01)
     {
         TransitionOtherState(parentState, parentState.hangWallState, player);
     }
 }
Пример #3
0
 /// <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);
 }
Пример #4
0
 public override void Exit(PlayerFSMSystem player)
 {
     currentState.Exit(player);
     //  player.inTheAir = false;
     inTheAirEvent.UpdateState(false);
     // 站在时有摩擦
     player.rb.sharedMaterial = player.hasFriction;
 }
Пример #5
0
        public override void FixedUpdate(PlayerFSMSystem player)
        {
            // 在空中也可以移动
            player.rb.velocity =
                new Vector2(player.xVelocity * (player.speed / player.jumpSleepDivisor),
                            player.rb.velocity.y);

            currentState.FixedUpdate(player);
        }
Пример #6
0
 /// <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;
 }
Пример #7
0
 public override void Enter(PlayerFSMSystem player)
 {
     // 先跳跃
     if (player != null)
     {
         player.rb.AddForce(
             new Vector2(0f, player.jumpForce / player.jump2ForceDivisor), ForceMode2D.Impulse);
     }
 }
Пример #8
0
        public override void Update(PlayerFSMSystem player)
        {
            if (Input.GetButtonDown("Jump") && jumpNumber > 0)
            {
                TransitionOtherState(parentSate, parentSate.jump2State, player);
            }

            jumpNumber++;
        }
Пример #9
0
        private int jumpNumber; // 跳跃次数,避免第一次就切换到二段跳了

        public override void Enter(PlayerFSMSystem player)
        {
            jumpNumber = 0;
            // 先跳跃
            if (player != null)
            {
                player.rb.AddForce(new Vector2(0f, player.jumpForce), ForceMode2D.Impulse);
            }
        }
Пример #10
0
        public override void Update(PlayerFSMSystem player)
        {
            if (!Input.GetButton("Crouch") && isTopEmpty)
            {
                TransitionOtherState(parentSate, parentSate.onStandState, player);
                return;
            }

            currentState.Update(player);
        }
Пример #11
0
        public override void Update(PlayerFSMSystem player)
        {
            // 一只脚着地无法蹲下
            if (Input.GetButton("Crouch") && !isHalfFoot)
            {
                TransitionOtherState(parentSate, parentSate.onCrouchState, player);
                return;
            }

            currentState.Update(player);
        }
Пример #12
0
        /// <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);
        }
Пример #13
0
        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);
            }
        }
Пример #14
0
 /// <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);               // 如果为空则不执行
     }
 }
Пример #15
0
 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);
     }
 }
Пример #16
0
        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);
        }
Пример #17
0
        /// <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);
        }
Пример #18
0
 public abstract void FixedUpdate(PlayerFSMSystem player);
Пример #19
0
 /// <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);
 }
Пример #20
0
 /// <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);
 }
Пример #21
0
 public override void Exit(PlayerFSMSystem player)
 {
     jumpNumber = 0;
 }
Пример #22
0
 public override void FixedUpdate(PlayerFSMSystem player)
 {
     // Debug.Log("当前是 Jump 状态");
 }
Пример #23
0
 public override void FixedUpdate(PlayerFSMSystem player)
 {
 }
Пример #24
0
 public override void Exit(PlayerFSMSystem player)
 {
     player.rb.bodyType = RigidbodyType2D.Dynamic;
     currentState.Exit(player);
 }
Пример #25
0
 /// <summary>
 /// 新状态的入口点,例如切换新状态前需要修改角色的动画
 /// </summary>
 /// <param name="player">可能为空</param>
 public virtual void Enter(PlayerFSMSystem player)
 {
 }
Пример #26
0
 public override void Enter(PlayerFSMSystem player)
 {
     player.rb.bodyType = RigidbodyType2D.Static;
     //player.rb.bodyType = RigidbodyType2D.Kinematic;
     TransitionState(hangWallState, player);
 }
Пример #27
0
 /// <summary>
 /// 在离开现有状态,转换到新状态之前调用的方法。
 /// </summary>
 /// <param name="player">可能为空</param>
 public virtual void Exit(PlayerFSMSystem player)
 {
 }
Пример #28
0
 public override void FixedUpdate(PlayerFSMSystem player)
 {
     player.rb.velocity =
         new Vector2(player.xVelocity * (player.speed / player.crouchSpeedDivisor),
                     player.rb.velocity.y);
 }
Пример #29
0
 public override void FixedUpdate(PlayerFSMSystem player)
 {
     player.rb.velocity =
         new Vector2(player.xVelocity * player.speed,
                     player.rb.velocity.y);
 }
Пример #30
0
 public override void Update(PlayerFSMSystem player)
 {
     currentState.Update(player);
 }