角色身上挂有一个Animator
状态管理应该有两种办法
第一种办法:
角色身上挂有两个脚本并
两个脚本分别是: 角色控制脚本,另一个是角色的状态脚本
角色控制脚本用以判断角色的移动和角色的状态切换
角色状态脚本专业负责状态的切换
第二中办法:
引入状态机的概念:
可以在角色控制脚本引入如下切换状态:
public void ToRun()
{
if (CurrRoleFsmMgr == null) return;
CurrRoleFsmMgr.ChangeState(RoleState.Run);
}
public class RoleFSMMgr
{
public AbsRoleState MRoleState=null;
public RoleCtrl CurrRoleCtrl;
public RoleState RoleStateEnum { get; set; }
private Dictionary<RoleState, AbsRoleState> _roleStateDict;
public RoleFSMMgr(RoleCtrl roleCtrl)
{
this.CurrRoleCtrl = roleCtrl;
_roleStateDict=new Dictionary<RoleState, AbsRoleState>();
_roleStateDict[RoleState.Idle] = new RoleIdleState(this);
_roleStateDict[RoleState.Die] = new RoleDieState(this);
_roleStateDict[RoleState.Run] = new RoleRunState(this);
_roleStateDict[RoleState.Attack1] = new RoleAttack1State(this);
_roleStateDict[RoleState.Attack2] = new RoleAttack2State(this);
_roleStateDict[RoleState.Attack3] = new RoleAttack3State(this);
_roleStateDict[RoleState.Skill1] = new RoleSkill1State(this);
_roleStateDict[RoleState.Skill2] = new RoleSkill2State(this);
_roleStateDict[RoleState.Skill3] = new RoleSkill3State(this);
if (_roleStateDict.ContainsKey(RoleStateEnum))
{
MRoleState = _roleStateDict[RoleStateEnum];
}
}
public void OnUpdate()
{
if (MRoleState != null)
{
MRoleState.OnUpdate();
}
}
public void ChangeState(RoleState newState)
{
if (CurrRoleCtrl == null) return;
if (RoleStateEnum==newState)return;
if (MRoleState != null)
{
MRoleState.OnExit();
}
RoleStateEnum = newState;
MRoleState = _roleStateDict[newState];
MRoleState.OnEnter();
}
}
animator建议使用Trigger触发,使用简单些!!!
FR:海涛高软(hunk Xu)
QQ技术交流群:386476712