1. 程式人生 > >Unity之Navigation導航系統

Unity之Navigation導航系統

Navigation系統的使用原理

NavMesh(導航網格)是3D遊戲世界中用於實現動態物體自動尋路的一種技術,將遊戲中複雜的結構組織關係簡化為帶有一定資訊的網格,在這些網格的基礎上通過一系列的計算來實現自動尋路。

在場景中搭建一個斜坡。例如:

建立好後,選中三個物件,這時在檢視面板裡面的選擇Navigation Static(只有被選中為Navigation Static才有網格導航系統)就行。選定Navigation Static之後在Window 選單下面點選Navigation這時你會發現在檢視面板裡面增加了一個檢視視窗。是Navigation檢視視窗。看看官方的解釋

首先看下Object選項卡。

Navigation Static  上面說了只有選中了Navigation Static之後才能進行網格導航。

Generate OffMeshLinkes  處於勾選狀態的話,網格導航可以Jump和Drop。

Navigation Area 導航網格層(在4.6版本中預設是Default)

接著是Bake選項卡

Agent Radius  烘焙半徑,值越小越好

Agent Height  角色所要通過的高度。

Max Slope 最大的坡度。當大於這個坡度時,會被丟棄

Step height 臺階高度。低於這個高度,導航網格地區為連線。

Drop Height 如果這個屬性的值是證書,相鄰的導航網格表面高度差低於此值,將進行網格連線

Jump distance 跳躍鉅鹿。如果這個屬性的值是正數,響鈴導航網格表面的水平距離低於此值,將進行網格連線。

Min Region Area 最小區域面積 。 如果低於此臨界值的區域將被丟棄。

最後,Areas選項卡。

裡面存放的是各個層的資訊。跟Object選項卡里面的Navigation Area掛鉤。

接下來就是在Bake選項卡里麵點擊Bake,就會發現有如下的場景。


在場景中分別在Plane上新增一個名為Player的物件,在正方體上新增一個名為Target的物件。並在Player上新增NavMeshAgent元件和自動尋路的指令碼。在腳本里面寫上:

 GetComponent<NavMeshAgent>().destination = target.position;
之後,一個簡單的尋路就完成了。

我們在前面的介紹中講到了,Jump和Drop的屬性(即自動Off Mesh Link)。接下來,我們來實現它們的功能。

在上面的基礎上我們只需將Bake選項卡中的Drop Height高度高於Agent Height高度,且在Cube站臺上放置Player物件,在Plane的任意位置上放置Target物件即可。執行起來之後我們就可以看到Player從站臺上跳下來並跑向Target.

Off Mesh Link元件

上面呢,我們講到了自動的Off Mesh Link的用法,這下我們來講解一下手動的Off Mesh Link的用法

首先建立如圖的場景,並對場景中的兩個Plane和站臺Cube進行烘焙,這時也要將Drop Height和Jump Distance的值分別填上。


左邊的平面上是Player物件,站臺上面的小球是Target物件。連個紅色的Cube是用來手動Off Mesh Link的中間變數。地面上的是名為Start的Cube,站臺上的是名為End的Cube。給Start Cube新增一個Off Mesh Link元件,並將Start,End  Cube分別拖到元件裡面的Start和End位置。在Player身上加個NavMeshAgent 和自動尋路的指令碼。指令碼的程式碼跟上面的一樣。這時你運行遊戲後會發現。小球會跨越兩個平面之間的間隙,利用Start  Cube來到達站臺上的Target目標。