敌人自动追击功能用到NavMeshAgent
制作NavMeshAgent:
首先选择地图,保持地图为static状态;
之后就是选择window里面的Navigation如下图:
然后点击Bake后得到如下图;蓝色地图区域就是表示可以自动寻路的区域
之后就是给敌人加入NavMeshAgent。。。
然后给敌人加入一个脚本enemymove();这样就实现了最简单的自动寻路去追击主角的功能。
using UnityEngine;
using System.Collections;
public class enemymove : MonoBehaviour {
private NavMeshAgent agent;
private Transform player;
void Awake()
{
agent = this.GetComponent<NavMeshAgent>();
}
void Start () {
player = GameObject.FindGameObjectWithTag(Tag.player).transform;
}
void Update () {
agent.SetDestination(player.position);//追击到主角的位置
}
}
最简单的追击功能就此实现了。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
设定一下enemy的动画状态机;如同player一样设定不介绍了直接看图:
之后为了完善追击功能和敌人动画的播放
首先为敌人设置刚体和collider(注意rigidbody的那两个属性把数值设置大。。player也是要设置大)
之后完善追踪及动画播放的代码:
using UnityEngine;
using System.Collections;
public class enemymove : MonoBehaviour {
private NavMeshAgent agent;
private Transform player;
private Animator anim;
void Awake()
{
agent = this.GetComponent<NavMeshAgent>();
anim = this.GetComponent<Animator>();
}
void Start () {
player = GameObject.FindGameObjectWithTag(Tag.player).transform;
}
void Update () {
if (Vector3.Distance(transform.position, player.position) < 2.5f)//如果在这个范围内停止追击
{
agent.Stop();//停止追击
anim.SetBool("MOVE", false);
}
else
{
agent.SetDestination(player.position);//追击到player的位置
anim.SetBool("MOVE", true);
}
}
}