unity 自動尋路
在專案開發中有時候,會用到unity自帶的自動尋路系統NavMesh,今天就說下他的簡單用法,NavMesh就是將遊戲場景中複雜的結構組織關係簡化為帶有一定資訊的網格,進而在這些網格的基礎上通過一系列的計算來實現自動尋路,在導航中,只需要給導航物體掛載到導航物體上,導航物體便會自行根據目標點來尋找符合條件的路線,並沿著該路線行進到目標點。
一、實現物體通過自動尋路移動到指定地點
1.首先就是編輯一個簡易的場景:
2.選中場景中的物件物體,將Static設定為Navigation Static核取方塊,unity就會通過選中的物件生成導航網格:
3.選擇選單欄中的Window--->Navigation命令,彈出Navgation檢視。然後選擇Navgation檢視中的Bake按鈕生成導航網格
4.就會生成相應的bake資訊,其中藍色區域就是可以進行移動的區域:
5.建立一個可移動的物體,這裡就用一個膠囊體代替,為其新增NavMesh Agent元件,下面講解一下這個元件的具體資訊:
Base offset 與地面偏移高度
speed 移動速度
Angular Speed 轉角速度 ,轉身速度 角速度: 最高轉速(度/秒)。
Acceleration 加速度,啟動時的 最大加速度。
Stopping Distance 停止距離 ,,制動距離:制動距離。到目的地的距離小於這個值,代理減速。
Auto Traverse OffMesh Link 自動遍歷OffMesh連結:自動移動並關閉OffMeshLinks
Auto Repath 自動重新尋路:如果現有的部分已失效,獲得新的路徑。
Height 高度:代理的高度(用於除錯圖形)。
Base offset 基本偏移:碰撞幾何體相對於實際幾何體垂直的偏移。
Obstacle Avoidance Type 障礙躲避型別 :躲避的質量水平。
NavMesh Walkable 導航網格行走:指定代理可以遍歷的導航網格層型別。這個引數很有用,在接下來的例項中可以用到。
6.為膠囊體新增移動指令碼,通過滑鼠點選移動到指定地點,程式碼如下:
public Camera camera; //相機
private NavMeshAgent navMeshAgent;
// Use this for initialization
void Start()
{
navMeshAgent = GetComponent<NavMeshAgent>();
}
// Update is called once per frame
void Update()
{
if (Input.GetMouseButtonDown(0))
{
if (navMeshAgent != null)
{
//獲取從主相機發出的一條射線
Ray mRay = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit mHit;
if (Physics.Raycast(mRay, out mHit))
{
//當碰撞到Terrain使獲取到當時的位置
if (mHit.collider.gameObject.tag == "Player")
{
navMeshAgent.destination = mHit.point;
}
}
}
}
}
具體效果:
備註:如果想實現可以直接跳躍到指定的目標位置處,可以設定Drop和Jump Distance,然後重新Bake就可以了:
二、實現不同物體,沿自己的專有道路移動到指定位置
1.搭建自己想要的場景資訊:
2.像上面的方式一樣,對所有路徑進行bake處理,但是唯一不同的需要設定不同的Layer,這裡我們設定三個不同的layer
3.先為不同的路徑設定對應的layer
4.為不同的移動的物體設定對應的layer:
5.然後新增移動程式碼:
public GameObject TargetGo;
public GameObject[] Solider;
// Use this for initialization
void Start()
{
for (int i = 0; i < Solider.Length; i++)
{
Solider[i].GetComponent<NavMeshAgent>().destination = TargetGo.transform.position;
}
}
6.移動效果
想了解更多相關資訊,可以關注下方公眾號或者QQ群:879354767
相關文章
- Unity實現A*尋路演算法學習2.0Unity演算法
- 使用GML的八方向自動尋路
- Ros 自動避障和尋路相關資料ROS
- 動態避障-圖撲自動尋路 3D 視覺化3D視覺化
- 【Javascript + Vue】實現對任意迷宮圖片的自動尋路JavaScriptVue
- 蜂巢型六邊形A星尋路演算法unity完整流程演算法Unity
- 自動網路搜尋(NAS)在語義分割上的應用(二)
- 遊戲中的自動尋路-A*演算法(走斜線篇——帶DEBUG)遊戲演算法
- Unity中的自動更新目錄結構設定Unity
- A*演算法之在U3d下實現簡單的自動尋路演算法3D
- Unity3d:程式碼自動新增場景到BuildSettingsUnity3DUI
- 基於Unity的A星尋路演算法(絕對簡單完整版本)Unity演算法
- A*尋路
- “掃蕩”、“自動尋路”這樣的簡化遊戲設計該不該存在?遊戲設計
- Unity幀動畫Unity動畫
- ios 自動化,尋求 WebDriverAgent 最佳化方案iOSWeb
- 遊戲AI尋路——八叉樹+A*尋路遊戲AI
- 【unity 技術教程】自動>手動 用隨機地圖豐滿你的遊戲Unity隨機地圖遊戲
- 自智網路,意圖驅動?
- 尋寶路線
- RPA機器人流程自動化:探尋人機互動新介面機器人
- 合同審查自動化-智慧化尋找合同問題
- NPC會在遊戲地圖中迷路嗎?——自動尋路的發展由來與應用前景遊戲地圖
- blender動畫匯出Unity動畫Unity
- Unity中的三種渲染路徑Unity
- CentOS自動開啟網路連線CentOS
- 資料模型與網路自動化模型
- 遊戲設計中如何不透過介面標識和自動尋路來自然地引導玩家?遊戲設計
- 不走尋常路
- Unity-卡片迴圈滾動Unity
- unity學習之角色移動Unity
- 【unity2022與html互動】UnityHTML
- Unity記憶體最佳化(來自uwa)Unity記憶體
- WDS+MDT網路啟動自動部署windows(十一)硬碟分割槽格式化全自動Windows硬碟
- WDS+MDT網路啟動自動部署windows(十六)計算機自動進入指定OUWindows計算機
- 自動化簡化了移動傳輸網路的部署
- 車庫尋車有什麼好辦法,停車場自動尋車系統怎麼用
- 全鏈路壓測自動化實踐