1. 如何使用NavMesh新組件
NavMesh的新組件一共有4個:
NavMeshSurface
NavMeshModifier
NavMeshModifierVolume
NavMeshLink
這4個新組件並不是在Unity5.6版本里面默認就有的,需要自己導入到工程中,下載->導入
接下來對4個組件逐個介紹

(上圖使用NavMeshSurface組件將這片區域變成可走區域)
High-level NavMesh 最核心的組件
NavMeshSuface組件代表agent可以走的區域,定義世界中哪部分應該被bake成NavMesh
一個場景中可以有多個NavMesh Surface組件

NavMeshSurface組件可以被加在任何游戲物體上,可以用來定義那些物體可以用來生成NavMesh(有了該組件后可以不需要設置物體Navigition static的靜態屬性,以前的靜態屬性只適用於editor模式,不適用於實時bake的特性)
參數介紹:
Agent Type: 用來匹配NavMeshAgent
Collect Object: 定義哪些物體用來bake生成NavMesh
All: 使用全部激活狀態的物體(無論是否是父子物體)

Volume: 被體積盒包圍的物體,或者是包圍在內的物體的部分

Children: 有NavMeshSurface組件的物體及其子物體

Include Layers: 定義哪些層的物體要被bake
Use Geometry: 選擇使用網格或者碰撞體來bake
Render Meshes - 使用Mesh Renderer 和 Terrains
Physics Colliders - 使用Colliders和Terrains(推薦)
Advanced:高級設置(一般默認就可以)
Default Area: 默認生成區域類型
Override Voxel Size: 覆蓋默認的Voxel Size,體素尺寸,用來調整精度,場景比較精密的可以把該值調小,值越小精度越高,精度越高,bake越慢,該值與Tile Size共同影響bake的效果
Override Tile Size: 覆蓋默認的Tile Size,塊大小,默認是256voxel作為一塊,為了讓bake有較多平行與增加內存效率才有了此設置,在障礙物多的時候,可以將塊減小以提升運行效率。或者打算實時bake的時候,可以用更小的Tile Size來降低內存消耗


Build Height Mesh: 不再被支持
其它說明:
NavMesh Surface組件用來設置一片大范圍內要被bake的物體的信息,而用NavMeshModifer組件可以對這些物體逐個進行微調
如果物體身上有NavMesh Agent或者NavMesh Obstacle組件則不會被bake進去,會在bake的時候剔除他們,因為他們是來用NavMesh的,不是來建造這個NavMesh的

(上圖用NavMeshModifier定義某一小塊區域為Lava(岩漿)類型的區域)
NavMesh Modifier組件允許對一些要用來被NavMeshSurface組件bake的物體進行微調
NavMesh Modifier組件的作用效果包括其下的所有子物體
NavMesh Modifier組件可用於實時bake,且不需要static標志
參數說明:
Ignore From Build: 是否無視bake
Override Area Type:生成區域類型
Affected Agents: 針對某個agents的微調,比如可以選擇排除該agents的某些特定的障礙

(上圖用NavMesh Modifier Volume將門的一片區域設置為不可走)
NavMesh Modifier Volume與NavMesh Modifier差不多
前者作用於對體積盒包圍的所有物體(或物體的部分),后者只作用於自身及其子物體
參數說明:
Size和Center:調整體積盒的大小位置,其它和NavMesh Modifier一樣
NavMesh Link組件允許在兩個區域間創建一條可通行的通道
NavMesh Link組件對於連接兩個不同的NavMesh Surfaces是必須的
參數說明:
Agent Type: 哪種Agent才可以使用這個NavMesh Link
Start Point:開始點
End Point:結束點
Align Transform To Points: 將綁定該NavMesh Link組件的物體的Tranfrom屬性與Link匹配,位置移動到link的中心,方向也對着link的方向
Cost Modifier: 測試不出有什么用,默認即可,原文→(when the cost modifier value is non-negative the cost of moving over the NavMeshLink is equivalent to the cost modifier value times the Euclidean distance between NavMeshLink and points.)
Bidirectional: 勾上時線的方向為雙向,沒勾時只能start-to-end單向
Area Type: 區域類型

可以使用多個 NavMesh Link連接多個NavMesh surfaces
Link和Sufaces都必須有相同的agent類型
Link的開始點和結束點都必須各種在一個surfaces內,兩個surfaces疊在一起會不清楚開始點或結束點連接放在哪個surface上
如果場景中已經有了Link,然后再添加NavMesh Surface的時候檢測會不會連接到不想連接的Surface
作者:懶_開果
鏈接:https://www.jianshu.com/p/c54ad92b1d76
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。