예제 #1
0
    bool CheckForValidVerticalState(LevelTwoHeroController.heroVerticalStates _newState)                //检测是否可以发生状态转变
    {
        bool _returnVal = false;                                                                        //默认不能

        switch (m_verticalCurrentState)                                                                 //判断当前竖直状态
        {
        case LevelTwoHeroController.heroVerticalStates.idle:                                            //当前为空闲或落地状态
            _returnVal = true;
            break;

        case LevelTwoHeroController.heroVerticalStates.landing:
            if (_newState != LevelTwoHeroController.heroVerticalStates.falling)                 //不能转为下落状态
            {
                _returnVal = true;
            }

            break;

        case LevelTwoHeroController.heroVerticalStates.jump:                                    //当前为跳跃状态
            if (_newState == LevelTwoHeroController.heroVerticalStates.falling ||               //只能转为下落和落地状态
                _newState == LevelTwoHeroController.heroVerticalStates.landing ||
                _newState == LevelTwoHeroController.heroVerticalStates.idle)
            {
                _returnVal = true;
            }

            break;

        case LevelTwoHeroController.heroVerticalStates.down:                                    //当前为下行状态
            if (_newState == LevelTwoHeroController.heroVerticalStates.falling)                 //可转为下落状态
            {
                _returnVal = true;
            }

            break;

        case LevelTwoHeroController.heroVerticalStates.falling:                                 //当前为下落状态
            if (_newState == LevelTwoHeroController.heroVerticalStates.landing)                 //可转为落地状态
            {
                _returnVal = true;
            }

            break;
        }
        return(_returnVal);                                                                                                             //返回是否可转化变量
    }
예제 #2
0
    public void OnVerticalStateChange(LevelTwoHeroController.heroVerticalStates _verticalNewState) //主角状态改变时调用以改变动画
    {
        if (_verticalNewState == m_verticalCurrentState)                                           //当前竖直状态未发生变化
        {
            return;
        }

        if (!CheckForValidVerticalState(_verticalNewState))                             //当前树枝状态不能发生转变
        {
            return;
        }

        switch (_verticalNewState)                                                  //新竖直状态类型
        {
        case LevelTwoHeroController.heroVerticalStates.idle:                        //需转为静止状态
            if (m_verticalCurrentState == LevelTwoHeroController.heroVerticalStates.jump)
            {
                AnimationNumClose();                                        //关闭所有变量
                m_heroAnimator.SetInteger("idleJump", 0);                   //idle <- jump
            }
            break;

        case LevelTwoHeroController.heroVerticalStates.jump:                                    //需转为跳跃状态
            if (m_horizontalCurrentState == LevelTwoHeroController.heroHorizontalStates.idle)   //如果当前水平未动
            {
                AnimationNumClose();                                                            //关闭所有变量
                m_heroAnimator.SetInteger("idleJump", 1);                                       //idle→jump
            }
            else                                                                                //如果当前为跑步状态
            {
                AnimationNumClose();                                                            //关闭所有变量
                m_heroAnimator.SetInteger("runJump", 1);                                        //run→jump
            }
            if (GetComponent <Rigidbody2D>().velocity.y <= 0)
            {
                this.GetComponent <Rigidbody2D>().AddForce(new Vector2(0, m_jumpForceVertical));                                                        //给主角添加向上力
            }
            break;

        case LevelTwoHeroController.heroVerticalStates.landing:                                   //需转为落地状态
            if (m_verticalCurrentState == LevelTwoHeroController.heroVerticalStates.falling)      //当前为下落状态
            {
                if (m_horizontalCurrentState == LevelTwoHeroController.heroHorizontalStates.idle) //水平为空闲
                {
                    if (m_heroAnimator.GetInteger("jumpFall") == 1)
                    {
                        m_heroAnimator.SetInteger("jumpFall", 2);                                               //fall→idle
                        m_heroAnimator.SetInteger("idleJump", 0);                                               //fall→idle
                    }
                    else
                    {
                        AnimationNumClose();                                                            //关闭所有变量
                    }
                    m_heroAnimator.SetInteger("idleFall", 0);                                           //fall→idle
                }
                else                                                                                    //水平为跑步
                {
                    if (m_heroAnimator.GetInteger("jumpFall") == 1)
                    {
                        m_heroAnimator.SetInteger("jumpFall", 2);                                               //fall→idle
                        m_heroAnimator.SetInteger("runJump", 0);                                                //fall→idle
                    }
                    else
                    {
                        AnimationNumClose();                                                            //关闭所有变量
                    }
                    m_heroAnimator.SetInteger("runFall", 0);                                            //fall→run
                }
            }
            else if (m_verticalCurrentState == LevelTwoHeroController.heroVerticalStates.jump)          //当前为跳跃状态
            {
                if (m_horizontalCurrentState == LevelTwoHeroController.heroHorizontalStates.idle)       //水平为空闲
                {
                    AnimationNumClose();                                                                //关闭所有变量
                    m_heroAnimator.SetInteger("idleJump", 0);                                           //jump→idle
                }
                else                                                                                    //水平为跑步
                {
                    AnimationNumClose();                                                                //关闭所有变量
                    m_heroAnimator.SetInteger("runJump", 0);                                            //jump→run
                }
            }
            break;

        case LevelTwoHeroController.heroVerticalStates.down:                                    //需转为下行状态
            m_hideCollider = true;                                                              //需要隐藏下方碰撞块
            GroundColliderCheck();

            break;

        case LevelTwoHeroController.heroVerticalStates.falling:                                   //需转为下落状态
            if (m_verticalCurrentState == LevelTwoHeroController.heroVerticalStates.jump)         //当前为跳跃状态
            {
                AnimationNumClose();                                                              //关闭速游变量
                m_heroAnimator.SetInteger("jumpFall", 1);                                         //jump→fall
            }
            else                                                                                  //当前非跳跃状态
            {
                if (m_horizontalCurrentState == LevelTwoHeroController.heroHorizontalStates.idle) //水平为空闲状态
                {
                    AnimationNumClose();                                                          //关闭所有变量
                    m_heroAnimator.SetInteger("idleFall", 1);                                     //idle→fall
                }
                else                                                                              //水平为跑步状态
                {
                    AnimationNumClose();                                                          //关闭所有变量
                    m_heroAnimator.SetInteger("runFall", 1);                                      //run→fall
                }
            }
            if (m_horizontalCurrentState == LevelTwoHeroController.heroHorizontalStates.left ||          //防止跳跃后滑行
                m_horizontalCurrentState == LevelTwoHeroController.heroHorizontalStates.right)
            {
                m_heroAnimator.SetInteger("idleRun", 1);
            }
            m_hideCollider = false;                                                                             //关闭隐藏按钮
            GroundColliderCheck();
            break;
        }
        m_verticalCurrentState = _verticalNewState;                                                     //更新竖直状态
    }