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); //返回是否可转化变量 }
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; //更新竖直状态 }