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_尋路系統Unity
- Ros 自動避障和尋路相關資料ROS
- Unity實現A*尋路演算法學習2.0Unity演算法
- 【Javascript + Vue】實現對任意迷宮圖片的自動尋路JavaScriptVue
- Android--自動搜尋提示Android
- 自動網路搜尋(NAS)在語義分割上的應用(二)
- 蜂巢型六邊形A星尋路演算法unity完整流程演算法Unity
- RobotFramework自動化3-搜尋案例Framework
- 遊戲中的自動尋路-A*演算法(走斜線篇——帶DEBUG)遊戲演算法
- Keil中搭建自動化單元測試框架Unity框架Unity
- Unity中的自動更新目錄結構設定Unity
- “掃蕩”、“自動尋路”這樣的簡化遊戲設計該不該存在?遊戲設計
- A*演算法之在U3d下實現簡單的自動尋路演算法3D
- ios 自動化,尋求 WebDriverAgent 優化方案iOSWeb優化
- Android--多選自動搜尋提示Android
- Unity多單位戰鬥尋路問題的一種解決辦法Unity
- Unity + ZXing + 螢幕旋轉自動自適應 + 自定義掃碼介面Unity
- 網路管理自動化
- Unity Attributes 自帶特性Unity
- A*尋路
- 基於Unity的A星尋路演算法(絕對簡單完整版本)Unity演算法
- 遊戲AI尋路——八叉樹+A*尋路遊戲AI
- Unity 拖動UIUnityUI
- Unity3d:程式碼自動新增場景到BuildSettingsUnity3DUI
- 關於尋路演算法的一些思考(9):尋路者的移動成本演算法
- 【unity 技術教程】自動>手動 用隨機地圖豐滿你的遊戲Unity隨機地圖遊戲
- 用python搭建"百萬贏家"自動搜尋答案Python
- jQuery的搜尋關鍵詞自動匹配外掛jQuery
- 在Windows中怎樣尋找自啟動程式(轉)Windows
- 自智網路,意圖驅動?
- NPC會在遊戲地圖中迷路嗎?——自動尋路的發展由來與應用前景遊戲地圖
- 合同審查自動化-智慧化尋找合同問題
- jQuery搜尋框關鍵字自動匹配提示詳解jQuery
- 尋路之 A* 搜尋演算法演算法
- Unity移動端動態陰影Unity
- js搜尋關鍵詞自動匹配功能程式碼例項JS
- 資料模型與網路自動化模型
- CentOS自動開啟網路連線CentOS