天天看點

Unity3D的導航網格尋路初嘗試

首先:随便搭個地形,有個平台和斜坡,注意斜坡的傾斜程度。

Unity3D的導航網格尋路初嘗試

搭出來的樣子,然後需要設定它們的Layer和勾選Navigation static 。

Unity3D的導航網格尋路初嘗試
Unity3D的導航網格尋路初嘗試
Unity3D的導航網格尋路初嘗試

打開Navigation進行navmesh的烘焙

Unity3D的導航網格尋路初嘗試
Unity3D的導航網格尋路初嘗試

上圖大紅框中是我們可以設定的配置的:我們可以設定agent(我們需要進行尋路的對象)的半徑和高度還有可以爬坡的傾斜度,比如我們在剛剛設定的斜坡角度大于45°,那麼我們的agent就上不去,還可以設定links的一些屬性,links應該是比如有兩個平台,可以跳過去的效果。然後點選bake烘焙可以得到下圖的烘焙效果,藍色代表可以尋路的地方。

Unity3D的導航網格尋路初嘗試

然後建立一個cylinder做我們的agent用來尋路。

Unity3D的導航網格尋路初嘗試

要給它設定添加Nav Mesh Agent元件,然後我還添加了Rigidbody元件,還有一個C#腳本。

Unity3D的導航網格尋路初嘗試

代碼主要實作了滑鼠點選位置然後我們的agent就去哪個地方

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;

public class AutoFindPath : MonoBehaviour
{
    public Vector3 MousePosition;
    public Transform Des;
    private void Start()
    {
        Debug.Log(Des);
        StartFindPath(Des);
    }
    private void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            RaycastHit hit;
            if (Physics.Raycast(ray, out hit, LayerMask.GetMask("Ground")))
            {
                MousePosition = hit.point;
                StartFindPath(MousePosition);
            }
        }
    }
    private void StartFindPath(Vector3 destination)
    {
        this.GetComponent<NavMeshAgent>().destination = destination;
    }
    private void StartFindPath(Transform destination)
    {
        this.GetComponent<NavMeshAgent>().destination = destination.position;
    }
}
           

效果:

Unity3D的導航網格尋路初嘗試

繼續閱讀