接下来我们就要对状态机进行填充:
using UnityEngine;
using System.Collections.Generic;
public class BossStateMachine {
//字典用来储存状态(方便调用)
private Dictionary<StateType, BossState> _dic = new Dictionary<StateType, BossState>();
private BossState _currentState;
private BossState _lastState;
我们需要在Boss类中补写要继承的对象
public class BossState {
public BossStateMachine machine;
}
public Boss boss;
public BossStateMachine(Boss boss)
{
this.boss = boss;
}
public void Register(StateType key,BossState value)
{
if(!_dic.ContainsKey(key))
{
value.machine = this;
_dic.Add(key, value);
}
}
public void ChangeState(StateType key)
{
if (_dic.ContainsKey(key))
{
_currentState = _dic[key];
}
else
{
Debug.Log("转换失败");
}
}
public void DoWork()
{
if(_currentState != _lastState)
{
_currentState.EnterState();
_lastState = _currentState;
}
_lastState.UpdateState();
if(_lastState != _currentState)
{
_lastState.ExitState();
}
}
}
接下来因为需要到玩家对象的位置信息(用寻路决定移动),所以选中场景里的对象进行烘焙,
此时运行游戏我们会发现,因为没有刚体Boss会发生重叠,所以我们可以考虑添加寻路组件(Nav),和相对应的动画。
在Boss类中添加以下组件
protected Animation _ani;
public Animation Ani { get { return _ani; } }
protected NavMeshAgent _nav;
public NavMeshAgent Nav { <