使用Unity自帶尋路:NavMesh

簡(jiǎn)介

NavMesh是Unity中的尋路系統(tǒng),如果開發(fā)的是3D游戲,使用它很合適.
里面常用到的幾個(gè)組件

  1. Navigation面板:烘培場(chǎng)景的尋路網(wǎng)格
  2. OffMeshLink
  3. NavMeshAgent組件:尋路角色
  4. NavMeshObstacle組件:阻擋物(可動(dòng)態(tài)修改)
  5. RaycastHit:射線,用于點(diǎn)擊操作

Navigation面板

  • 打開Window->Navigation面板
  • 在場(chǎng)景中選擇需要烘培的Mesh物體
  • Navigation->Object中,把物體設(shè)置為NavigationStatic
  • Generate OffMeshLinks選項(xiàng)是設(shè)置是否生成和其他物體之間的鏈接尋路關(guān)系(例如跳躍)
  • 點(diǎn)擊右下角的Bake按鈕,就能看到場(chǎng)景中生成的尋路網(wǎng)格.


    unity_xl1.png

OffMeshLink

給一個(gè)需要烘培物體添加額外通過的鏈接(如樓梯,門,傳送帶)


unityxl2.png

BiDirectional:可以往返尋路
如圖,紅色樓梯區(qū)域:角色可以從Start走到End


unityxl3.png

NavMeshAget組件

在一個(gè)角色上添加了NavMeshAgent組件之后,角色就可以遵循地圖上烘培好的尋路網(wǎng)格進(jìn)行移動(dòng),移動(dòng)代碼在后面使用RaycastHit捕捉鼠標(biāo)點(diǎn)擊的例子.


unityxl4.png

NavMeshObstacle組件

NavMeshObstacle是用來設(shè)置阻礙物,當(dāng)它開啟時(shí)會(huì)在尋路網(wǎng)格上生成一個(gè)網(wǎng)孔,以防止移動(dòng).


unityxl5.png

一個(gè)物體不能同時(shí)開啟NavMeshAget和NavMeshObstacle,但是可以在運(yùn)行時(shí)實(shí)時(shí)修改其開關(guān).

RaycastHit

最后使用RaycastHit在場(chǎng)景中拾取移動(dòng)的坐標(biāo),配合NavMesh等組件進(jìn)行移動(dòng)

using UnityEngine;
using System.Collections;
public class MovePick : MonoBehaviour {
    NavMeshAgent agent;
    NavMeshObstacle obstacle;

    void Start () {
        agent = GetComponent<NavMeshAgent> ();
        obstacle = GetComponent<NavMeshObstacle> ();
        obstacle.enabled = false;
    }

    void Update () {
        if (Input.GetMouseButtonDown (0)) {
            RaycastHit hit;
            if (Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), out hit, 100)) {
                agent.enabled = true;
                obstacle.enabled = false;
                agent.SetDestination(hit.point);
            }
        }

        if (agent.enabled && agent.remainingDistance < 1 && agent.remainingDistance > 0.5) {
            agent.Stop(true);
            agent.enabled = false;
            obstacle.enabled = true;
        }
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • unity自從3.5版本之后,增加了NavMesh尋路的功能。在此之前,unity用戶只能通過第三方插件(如Ast...
    壹米玖坤閱讀 8,661評(píng)論 0 10
  • Untiy 提供 NavMesh (導(dǎo)航網(wǎng)格)可使物體實(shí)現(xiàn)自動(dòng)尋路。《 Unity 人工智能游戲開發(fā)》在第四章介紹...
    YLME閱讀 8,746評(píng)論 2 5
  • NavMesh(導(dǎo)航網(wǎng)格)是3D游戲世界中用于實(shí)現(xiàn)動(dòng)態(tài)物體自動(dòng)尋路的一種技術(shù),將游戲中復(fù)雜的結(jié)構(gòu)組織關(guān)系簡(jiǎn)化為帶有...
    李亞楠0219閱讀 1,520評(píng)論 0 2
  • Unity自動(dòng)尋路指南 主要參考Naviation這個(gè)文檔。本文不關(guān)注自動(dòng)尋路的原理,如有需要可以在這里查看nav...
    xFerris閱讀 4,362評(píng)論 0 4
  • 網(wǎng)絡(luò)營(yíng)銷我接觸很久了,從當(dāng)初懵懵懂懂的小白,以為某些大師非常了不起,一個(gè)簡(jiǎn)單的一句話就可能賣出一百萬。于是也幻想著...
    趙艷偉閱讀 430評(píng)論 0 2

友情鏈接更多精彩內(nèi)容