W3Cschool
恭喜您成為首批注冊用戶
獲得88經驗值獎勵
過去,游戲開發(fā)者必須自己打造尋路系統(tǒng),特別是在基于節(jié)點的尋路系統(tǒng)中,必須手動地在 AI 使用的點之間進行導航,因此基于節(jié)點系統(tǒng)的尋路非常煩瑣。
Unity 3D 不僅具有導航功能,還使用了導航網格(navigation meshes),這比手動放置節(jié)點更有效率而且更流暢。
更重要的是,還可以一鍵重新計算整個導航網格,徹底擺脫了手動修改導航節(jié)點的復雜方法。
NavMesh 的設置方法很簡單,在 Hierarchy 視圖中選中場景中除了目標和主角以外的游戲對象,在 Inspector 視圖中單擊 Static 下拉列表,在其中勾選 Navigation Static 即可,如下圖所示。
執(zhí)行菜單 Window→Navation 命令,打開導航窗口,單擊右下角的 Bake(烘焙)按鈕即可,烘焙后的場景如下圖所示。 接下來詳細看看 Navigation 面板,它有 Object、Bake、Areas 這 3 個標簽頁。
其中,Object 標簽頁如下圖所示,該標簽頁可以設置游戲對象的參數,如下表所示。當選取游戲對象后,可以在此標簽頁中設置導航相關參數。
參 數 | 功 能 |
---|---|
Navigation Static | 勾選后表示該對象參與導航網格的烘焙 |
Generate OffMeshLinks | 勾選后可在導航網格中跳躍(Jump)和下落(Drop) |
Navigation Area | 導航區(qū)域 |
Bake 標簽頁如下圖所示,是 Navigation 面板最重要的標簽頁,在該標簽頁下可以設置導航代理相關參數以及烘焙相關參數,參數說明如下表所示。
參 數 | 功 能 |
---|---|
Agent Radius | 設置具有代表性的物體半徑,半徑越小,生成的網格面積越大 |
Agent Height | 設置具有代表性的物體的高度 |
Max Slope | 設置斜坡的坡度 |
Step Height | 設置臺階高度 |
Drop Height | 設置允許最大的下落距離 |
Jump Distance | 設置允許最大的跳躍距離 |
Manual Voxel Size | 設置是否手動調整烘焙尺寸 |
Voxel Size | 設置烘焙的單元尺寸,控制烘焙的精度 |
Min Region Area | 設置最小區(qū)域 |
Height Mesh | 設置當地形有落差時是否生成精確而不是近似的烘焙效果 |
導航代理(Navigation Agent)可以理解為去尋路的主體。
在導航網格生成之后,給游戲對象添加了一個 Nav Mesh Agent 組件,如下圖所示。
Nav Mesh Agent 面板中各導航代理參數含義如下表所示。
屬性分區(qū) | 參 數 | 功 能 |
---|---|---|
Agent Size | Radius | 設置導航代理的半徑 |
Height | 設置導航代理的高度 | |
Base Offset | 設置圓柱體相對于本地坐標的偏移 | |
Steering | Speed | 設置最大移動速度 |
Angular Speed | 設置最大角速度 | |
Acceleration | 設置最大加速度 | |
Stopping Distance | 設置離目標距離還有多遠時停止 | |
Auto Braking | 激活時,到達目標位置前將減速 | |
Obstacle Avoidance | Quality | 設置躲避障礙物的質量,如果設置為0則不躲避其他導航 代理 |
Priority | 設置自身的導航優(yōu)先級,范圍是0?99,值越小,優(yōu)先級 越大 | |
Path Finding | Auto Traverse Off Mesh Link | 設置是否采用默認方式經過鏈接路徑 |
Auto Repath | 設置當現有的路徑變?yōu)闊o效時是否嘗試獲取一個新的路徑 | |
Area Mask | 設置此導航代理可以行走哪些區(qū)域類型 |
使用 Unity 3D 開發(fā)游戲,自動尋路可以有很多種實現方式。A 星尋路是一種比較傳統(tǒng)的人工智能算法,在游戲開發(fā)中比較常用。
另外,Unity 3D 官方內置的尋路插件 Navmesh 也可以實現自動尋路功能。
本案例旨在通過一個簡單的三維場景漫游實現 Navmesh 自動尋路插件的使用。
本案例在 Unity 3D 內創(chuàng)建一個簡單的三維場景,場景內有各種障礙,通過 Navmesh 插件可以自動尋找到目標位置。
步驟 1):新建三維場景,將其命名為 Navigation。其中,膠囊體作為動態(tài)移動的對象,球體作為導航的目標,如下圖所示。 步驟 2):選中場景中所有除了 sphere、cylinder 攝像機以及直線光以外的所有物體,單擊 Inspector 面板中右上角的 Navigation Static,使這些物體成為靜態(tài)物體,并設置成 Navigation Static 類型,如下圖所示。
步驟 3):執(zhí)行菜單欄中的 Window→Navigation 命令,Navigation 面板如下圖所示。
步驟 4):單擊該面板右下角的 Bake 按鈕,即可生成導航網格,下圖為已生成的導航網格。
步驟 5):下面就可以讓一個膠囊體根據一個導航網格運動到目標 Sphere 位置。執(zhí)行 Component→Navigation→Nav Mesh Agent 為該膠囊體掛載一個 Nav Mesh Agent,如下圖所示。
步驟 6):最后寫一個腳本就可以實現自動尋路了。創(chuàng)建 C#
腳本,將其命名為 DemoNavigation,腳本如下:
純文本復制
using UnityEngine;
using System.Collections;
public class DemoNavigation:MonoBehaviour{
public Transform target;
void Start(){
if(target!=null){
this.gameObject.GetComponent<NavMeshAgent>().destination=target.position;
}
}
}
步驟 7):腳本新建完成后掛載到膠囊體上,然后將 Sphere 賦予膠囊體的 Navigation 腳本,運行場景,如下圖所示,膠囊體會運動到 Sphere 的位置。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: