版权声明:欢迎转载,转载请注明原博客链接:http://blog.csdn.net/u013108312 和本文章的链接。谢谢合作。作者:CircleGood https://blog.csdn.net/u013108312/article/details/70313155
本文固定链接:http://blog.csdn.net/u013108312/article/details/70313155
using UnityEngine;
using System.Collections;
public abstract class StateBase : IState
{
protected PlayerBase mPlayer;
public StateBase(PlayerBase player)
{
mPlayer = player;
}
public abstract uint GetStateID();
public abstract void OnEnter(StateMachine machine, IState prevState, object param1, object param2);
public abstract void OnLeave(IState nextState, object param1, object param2);
public abstract void OnUpate();
public abstract void OnFixedUpdate();
public abstract void OnLeteUpdate();
public virtual void OnAnimationEventEnd(string clipName) { }
public virtual void OnAnimationAttackOver(string clipName) { }
}
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class PlayerBase : MonoBehaviour
{
/// <summary> 角色阵营 </summary>
public uint camp;
/// <summary>
/// 角色状态机
/// </summary>
protected StateMachine mPlayerStateMachine = new StateMachine();
/// <summary>
/// 角色状态机
/// </summary>
public StateMachine playerStateMachine
{
get
{
return mPlayerStateMachine;
}
}
private Animator mPlayerAnimator;
/// <summary>
/// 动画控件
/// </summary>
public Animator palyerAnimator
{
get
{
if(mPlayerAnimator == null)
{
mPlayerAnimator = GetComponent<Animator>();
}
return mPlayerAnimator;
}
}
protected List<PlayerBase> mOtherRole = null;
/// <summary>
/// 对方角色
/// </summary>
public List<PlayerBase> OtherRole
{
get
{
return mOtherRole;
}
}
/// <summary>
/// 播放动画剪辑
/// </summary>
/// <param name="clipName"></param>
public void Play(string clipName)
{
palyerAnimator.Play(clipName);
}
/// <summary>
/// 切换状态
/// </summary>
/// <param name="stateId">状态id</param>
/// <param name="param1">参数1</param>
/// <param name="param2">参数2</param>
public virtual void SwitchState(uint stateId,object param1 = null,object param2 = null)
{
if(param1 != null)
{
mOtherRole = param1 as List<PlayerBase>;
}
mPlayerStateMachine.SwitchState(stateId, param1, param2);
}
/// <summary>
/// 角色动画播放结束
/// </summary>
/// <param name="clipNmae"></param>
public void AnimationEventEnd(string clipName)
{
Debug.Log("角色动画播放结束" + clipName);
if(mPlayerStateMachine.CurrentState != null)
{
StateBase state = mPlayerStateMachine.CurrentState as StateBase;
state.OnAnimationEventEnd(clipName);
}
}
/// <summary>
/// 角色攻击结束
/// </summary>
/// <param name="clipName"></param>
public void AnimationAttackOver(string clipName)
{
Debug.Log("攻击结束" + clipName);
if (mPlayerStateMachine.CurrentState != null)
{
StateBase state = mPlayerStateMachine.CurrentState as StateBase;
state.OnAnimationAttackOver(clipName);
}
}
#region 系统方区
void Awake()
{
OnAwake();
}
void Update()
{
OnUpdate();
mPlayerStateMachine.OnUpate();
}
void FixedUpdate()
{
OnFixedUpdate();
mPlayerStateMachine.OnFixedUpdate();
}
void LeteUpdate()
{
OnLeteUpdate();
mPlayerStateMachine.OnLeteUpdate();
}
#endregion
public virtual void OnAwake() { }
public virtual void OnUpdate() { }
public virtual void OnFixedUpdate() { }
public virtual void OnLeteUpdate() { }
}