自動尋路步驟:
① 把場景中不動的物體勾選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);
}
}
}