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

        switch (m_verticalCurrentState)                                               //判断当前竖直状态
        {
        case HeroStateController.heroVerticalStates.idle:                             //
            _returnVal = true;

            break;

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

            break;

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

            break;

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

            break;

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

            break;
        }
        return(_returnVal);                                                  //返回是否可转化变量
    }
Beispiel #2
0
    public void OnVerticalStateChange(HeroStateController.heroVerticalStates _verticalNewState) //主角状态改变时调用以改变动画
    {
        //print("old: "+ m_verticalCurrentState +"     ->            new :   "+_verticalNewState);
        if (_verticalNewState == m_verticalCurrentState)                    //当前竖直状态未发生变化
        {
            return;
        }

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

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

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

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

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

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