1.获取怪物身上的组件,并找到Player
m_Animator = GetComponent<Animator>();
m_CharaCtrl = GetComponent<CharacterController>();
m_MonsterData = new MonsterData(); //怪物数据
player = GameObject.FindGameObjectWithTag("Player");
2.编写每帧处理的代码
private void Update()
{
CheckAttack();
}
public void CheckAttack()
{
if (player)
{
Vector3 deltaPos = player.transform.position - transform.position;
//直线距离
float distance = deltaPos.magnitude;
if (distance < m_MonsterData.FlownDistance)
{
if (distance <= m_MonsterData.AttackDistance)
{
m_FsmManager.ChangeState(StateEnum.Attack);
}
else
{
//********重点********
m_CharaCtrl.SimpleMove(deltaPos.normalized);
m_FsmManager.ChangeState(StateEnum.Walk);
}
//朝向
transform.LookAt(player.transform.position);
}
else
{
m_FsmManager.ChangeState(StateEnum.Idle);
}
}
}
3.附上MonsterData代码
public class MonsterData
{
public delegate void DataBack(byte index);
DataBack datackHelper;
private float bloodCount;
/// <summary>
/// 血量
/// </summary>
public float BloodCout
{
get
{
return bloodCount;
}
set
{
bloodCount = value;
if (bloodCount <= 0)
{
bloodCount = 0;
datackHelper(1);
}
}
}
private float flownDistance;
/// <summary>
/// 跟随距离
/// </summary>
public float FlownDistance
{
get
{
return flownDistance;
}
set
{
flownDistance = value;
}
}
private float attackDistance;
/// <summary>
/// 攻击距离
/// </summary>
public float AttackDistance
{
get
{
return attackDistance;
}
set
{
attackDistance = value;
}
}
public MonsterData()
{
//datackHelper = back;
bloodCount = 100;
flownDistance = 10;
attackDistance = 2;
}
/// <summary>
/// 减血
/// </summary>
/// <param name="count"></param>
public void ReduceBlood(float count)
{
BloodCout -= count;
}
}