Ejemplo n.º 1
0
    bool CheckForValidVerticalState(LevelOneHeroController.heroVerticalStates _newState)                //检测是否可以发生状态转变
    {
        bool _returnVal = false;                                                                        //默认不能

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

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

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

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

        case LevelOneHeroController.heroVerticalStates.falling:                                 //当前为下落状态
            if (_newState == LevelOneHeroController.heroVerticalStates.landing)                 //可转为落地状态
            {
                _returnVal = true;
            }
            else
            {
                _returnVal = false;
            }
            break;
        }
        return(_returnVal);                                                                                                                     //返回是否可转化变量
    }
Ejemplo n.º 2
0
    public void OnVerticalStateChange(LevelOneHeroController.heroVerticalStates _verticalNewState)      //主角状态改变时调用以改变动画
    {
        if (_verticalNewState == m_verticalCurrentState)                                                //当前竖直状态未发生变化
        {
            return;
        }
        if (!CheckForValidVerticalState(_verticalNewState))                                             //当前树枝状态不能发生转变
        {
            return;
        }
        switch (_verticalNewState)                                                              //新竖直状态类型
        {
        case LevelOneHeroController.heroVerticalStates.idle:                                    //需转为静止状态
            if (m_verticalCurrentState == LevelOneHeroController.heroVerticalStates.jump)
            {
                AnimationNumClose();                                        //关闭所有变量
                m_heroAnimator.SetInteger("idleJump", 0);                   //idle <- jump
            }
            break;

        case LevelOneHeroController.heroVerticalStates.jump:                                    //需转为跳跃状态
            if (m_horizontalCurrentState == LevelOneHeroController.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 LevelOneHeroController.heroVerticalStates.landing:                                   //需转为落地状态
            if (m_verticalCurrentState == LevelOneHeroController.heroVerticalStates.falling)      //当前为下落状态
            {
                if (m_horizontalCurrentState == LevelOneHeroController.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 == LevelOneHeroController.heroVerticalStates.jump)                  //当前为跳跃状态
            {
                if (m_horizontalCurrentState == LevelOneHeroController.heroHorizontalStates.idle)               //水平为空闲
                {
                    AnimationNumClose();                                                                        //关闭所有变量
                    m_heroAnimator.SetInteger("idleJump", 0);                                                   //jump→idle
                }
                else                                                                                            //水平为跑步
                {
                    AnimationNumClose();                                                                        //关闭所有变量
                    m_heroAnimator.SetInteger("runJump", 0);                                                    //jump→run
                }
            }
            break;

        case LevelOneHeroController.heroVerticalStates.down:                                    //需转为下行状态

            break;

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