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

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

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

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

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

        case HeadBattleHeroController.heroVerticalStates.falling:                               //当前为下落状态
            if (_newState == HeadBattleHeroController.heroVerticalStates.landing)               //可转为落地状态
            {
                _returnVal = true;
            }
            else
            {
                _returnVal = false;
            }
            break;
        }
        return(_returnVal);                                                                                                             //返回是否可转化变量
    }
コード例 #2
0
    public void OnVerticalStateChange(HeadBattleHeroController.heroVerticalStates _verticalNewState) //主角状态改变时调用以改变动画
    {
        if (_verticalNewState == m_verticalCurrentState)                                             //当前竖直状态未发生变化
        {
            return;
        }
        if (!CheckForValidVerticalState(_verticalNewState))                                     //当前树枝状态不能发生转变
        {
            return;
        }
        switch (_verticalNewState)                                                              //新竖直状态类型
        {
        case HeadBattleHeroController.heroVerticalStates.idle:                                  //需转为静止状态
            break;

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

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

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

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