敌人自动追击功能用到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);
        }
	}
}


Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐