自动寻路步骤:
① 把场景中不动的物体勾选static
② 烘焙寻路网格
③ 添加NavMeshAgent组件
④ 给需要寻路的物体添加脚本
实现:
① 搭一个简易场景
放上enemy和player:
把场景设为静态
选择window→navigation,调出navigation面板,选择bake,形成一个蓝色路面,enemy将在这个蓝色路面上进行寻路
给寻路者(敌人)添加NavMeshAgent组件
把下面脚本挂到enemy上
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;
/// <summary>
/// 寻路算法
/// </summary>
public class NavTest : MonoBehaviour {
private NavMeshAgent agent;//寻路者
public Transform target;//寻路目标
private void Start()
{
agent = this.GetComponent<NavMeshAgent>();
}
private void Update()
{
if(agent!=null)
{
agent.SetDestination(target.position);//寻路算法
}
}
}
运行,enemy自动靠近player
但是enemy和player会重合在一起
调Stopping Distance
如果没有player,点击哪就让AI往哪寻路呢?
把下面脚本挂到Camera上,为AI添加NavMeshAgent组件,同样需要烘焙一个NavMash
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;
public class RayTest : MonoBehaviour {
private Ray ray;
private RaycastHit hit;//射线碰到的碰撞信息
public GameObject navPlayer;//寻路的人
private NavMeshAgent agent;
private void Start()
{
agent = navPlayer.GetComponent<NavMeshAgent>();
}
private void Update ()
{
//射线起始位置
ray = Camera.main.ScreenPointToRay(Input.mousePosition);
if(Physics.Raycast(ray,out hit, 100) && Input.GetMouseButtonDown(0))
{
agent.SetDestination(hit.point);
Debug.DrawLine(ray.origin, hit.point, Color.red);
}
}
}