1. 程式人生 > >Unity手遊之路自動尋路Navmesh之入門

Unity手遊之路自動尋路Navmesh之入門

現在的大部分mmo遊戲都有了自動尋路功能。點選場景上的一個位置,角色就會自動尋路過去。中間可能會有很多的障礙物,角色會自動繞過障礙物,最終達到終點。使用Unity來開發手遊,自動尋路可以有很多種實現方式。第一種比較傳統的是使用A星尋路,它是一種比較傳統的人工智慧演算法,在遊戲開發中比較常用到。大部分的頁遊和端遊都用到這種技術。在Unity遊戲也可以用這種技術,Asset Store上面已經有相關的元件了,感興趣的同學可以自己去了解。我在後面有機會再來詳細介紹了。今天我們來學習Unity官方內建的尋路外掛-Navmesh。由於內容比較多,我們將分幾次來系統學習。今天先通過學習一個最簡單的例子來入門。

  • 例項
我們要實現一個功能:點選場景中的一個位置,角色可以自動尋路過去。角色會繞過各種複雜的障礙,找到一條理論上”最短路徑“。
  • 步驟
1.建立地形
2.新增角色
3.建立多個障礙物,儘量擺的複雜一點,來檢查Navmesh的可用性和效率。
4.選中地形,在Navigation視窗中,設定Navigation Static

5.依次選中障礙物,在avigation視窗中,設定Navigation Static
7.Navigation視窗中,選擇Bake(烘焙)介面,點選Bake按鈕,程序場景烘焙,就可以烘焙出尋路網格了
8.為角色新增NavMeshAgent元件。Component->Navigation->Nav Mesh Agent
9.為角色新增一個指令碼PlayerController.cs,實現點選目標,自動尋路功能
using UnityEngine;
using System.Collections;

//Author:
[email protected]
public class PlayerController : MonoBehaviour { private NavMeshAgent agent; void Start() { //獲取元件 agent = GetComponent<NavMeshAgent>(); } void Update() { //滑鼠左鍵點選 if (Input.GetMouseButtonDown(0)) { //攝像機到點選位置的的射線 Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit; if (Physics.Raycast(ray, out hit)) { //判斷點選的是否地形 if (!hit.collider.name.Equals("Terrain")) { return; } //點選位置座標 Vector3 point = hit.point; //轉向 transform.LookAt(new Vector3(point.x, transform.position.y, point.z)); //設定尋路的目標點 agent.SetDestination(point); } } //播放動畫,判斷是否到達了目的地,播放空閒或者跑步動畫 if (agent.remainingDistance == 0) { animation.Play("idle"); } else { animation.Play("run"); } } }
完成了,可以看看效果:


  • 相關知識
1.角色身上的Nav Mesh Agent 元件

Radius 半徑: 代理的半徑(僅用於尋路目的,可以跟實際物件的半徑大小不一樣,一般比實際物件的半徑大)。
Speed 速度: 代理可以周遊世界,走向它的目的地的最大移動速度。
Acceleration 加速度: 最大加速度。
Angular Speed 角速度: 最高轉速(度/秒)。
Stopping distance 制動距離:制動距離。到目的地的距離小於這個值,代理減速。
Auto Traverse OffMesh Link 自動遍歷OffMesh連結:自動移動並關閉OffMeshLinks
Auto Repath 自動重新尋路:如果現有的部分已失效,獲得新的路徑。
Height 高度:代理的高度(用於除錯圖形)。
Base offset 基本偏移:碰撞幾何體相對於實際幾何體垂直的偏移。
Obstacle Avoidance Type 障礙躲避型別 :躲避的質量水平。
NavMesh Walkable 導航網格行走:指定代理可以遍歷的導航網格層型別。這個引數很有用,在接下來的例項中可以用到

2.障礙物一定要有Mesh Render,用於烘焙尋路網格。
  • 總結
這個例項可以很簡單的讓我們學會如何最基本的使用自動尋路元件Nav。但是,這個元件還提供了更加強大的功能,比如,起始點和目標點中間出現阻斷了,
怎麼辦?在下面的文章中,我們將會繼續探尋其他強大的功能。
  • 原始碼
  • 參考資料

1.http://www.xuanyusong.com/

2.http://liweizhaolili.blog.163.com/

3.http://game.ceeger.com/Components/class-NavMeshAgent.html

相關推薦

Unity自動Navmesh入門

現在的大部分mmo遊戲都有了自動尋路功能。點選場景上的一個位置,角色就會自動尋路過去。中間可能會有很多的障礙物,角色會自動繞過障礙物,最終達到終點。使用Unity來開發手遊,自動尋路可以有很多種實現方式。第一種比較傳統的是使用A星尋路,它是一種比較傳統的人工智慧演算法,在遊

【學習】Unity<十二>資源熱更新策略探討

似的 remove 方式 comment word rep 熱更新 style encoding http://blog.csdn.net/janeky/article/details/17666409 =================================

Unity角色控制器

我們要控制角色的移動,可以全部細節都由自己來實現。控制角色模型的移動,同時移動攝影機,改變視角。當然Unity也提供了一些元件,可以讓我們做更少的工作,實現我們所期望的功能。今天我們就一起系統來學習相關的內容吧。 Charactor Controller(角色控制器) "

unity自動 ------ wayPoint的實現方式

孫廣東 2015.6.28看了看  Unity的官方案例,就順便看了 wayPoint相關。效果:WaypointProgressTracker.cs  【固定】WaypointCircuit.cs  【固定】using System; using System.Collec

Unity代碼更新策略探討

icon 大型機 git sheet 安裝包 中新 svg sdn 情況 版權聲明: https://blog.

A*算法在U3d下實現簡單的自動

engine ati mat param erp ane 自動尋路 lose var 前言: 算法簡介:   A*搜尋算法俗稱A星算法。A*算法是比較流行的啟發式搜索算法之一,被廣泛應用於路徑優化領域[。它的獨特之處是檢查最短路徑中每個可能的節點時引入了全局信息,對當前節點

unity 自動

在專案開發中有時候,會用到unity自帶的自動尋路系統NavMesh,今天就說下他的簡單用法,NavMesh就是將遊戲場景中複雜的結構組織關係簡化為帶有一定資訊的網格,進而在這些網格的基礎上通過一系列的計算來實現自動尋路,在導航中,只需要給導航物體掛載到導航物體上,導航物體便

Unity射線&自動/右鍵點選某一點會使物體跟隨至滑鼠點選位置/計算目標物體距離滑鼠點選位置的距離

public class MyRay : MonoBehaviour { public GameObject GameObject;//要例項化的物體 粒子特效 public GameObject Player; // private Animation ani; priva

Unity自動的幾種方法(一)

在遊戲製作中,我們經常會用到角色自動尋路這個功能,點選小地圖或者場景中的某一處時,角色會自動走向目的地,並且自動避開期間的障礙物。不單單在遊戲的製作中用得到這個功能,在虛擬現實的專案中同樣有時候會需要這樣的功能。 在Unity中,有多種方法能夠實現尋路的功能,我試用的有以下

Unity自動的幾種方法(三)

    現在的大部分mmo遊戲都有了自動尋路功能。點選場景上的一個位置,角色就會自動尋路過去。中間可能會有很多的障礙物,角色會自動繞過障礙物,最終達到終點。使用Unity來開發手遊,自動尋路可以有很多種實現方式。第一種比較傳統的是使用A星尋路,它是一種比較傳統的人工智慧演算

關於Unity navMeshAgent自動的停止和更新問題

這兩天可把我愁死,明明是一個很簡單的問題,沒有去了解基礎實質,只想著快點做完果然很耽誤事,也是把解決辦法分享出來,辦法很low歡迎交流。 哪個物體需要尋路就在哪個物體上加一個Nav Mesh Agent元件,主要介紹一下steering下的引數,一個是尋路速度,最大

易編遠航第二期-五套無自動

[易編遠航]二期5套-座標轉換之小地圖精確尋路 前言: 部分遊戲不能點選NPC或者座標直接尋路到達目的地,但是可以點選小地圖尋路。 我們的思路就是點選小地圖精確到達指定的目的地。 思路: 顧名思義,就是獲得一個需要到達的座標,通過計算轉換成小地圖上的座標,           直接點選小地圖上的座標進

unity】 鼠標點擊AI【未完】

ima 障礙 mesh 技術分享 ges blog com 創建 靜態 先創建一個場景,立方體為障礙物,膠囊為玩家。 然後創建NavMesh,選擇plane和立方體,並在導航窗口的對象選項卡上選擇導航靜態。 然後去轉到烘焙選項卡,點擊烘焙按鈕: 【unity】 鼠標點擊

人工智能: 自動算法實現(四、D、D*算法)

ali html 速度 狀態 算法 http all gin ogr 博客轉載自:https://blog.csdn.net/kongbu0622/article/details/1871520 據 Drew 所知最短路經算法現在重要的應用有計算機網絡路由算法,機器人探路,

資料結構深度---地圖(棧實現)

注:深度尋路用到的棧標頭檔案以及.cpp檔案 在我的資源中可下載或者Q:1286550014(免費) 深度尋路 原理:在地圖中從一個點開始,從規定方向開始走,無障礙就繼續走,資料壓棧,如果有障礙就退一步,資料出棧,直至找到終點或無終點時,尋路結束。 一、標頭檔案匯入 #i

Unity3D——學習分享(十四)實現自動

為了使遊戲增加更多的可玩性,自動尋路功能已經是遊戲中不可或缺的功能了。比如絕地求生中的人機自動尋找目標等。今天分享一個簡單的自動尋路的實現,通過這節的學習,應該會對尋路有更多的瞭解,就可以嘗試更加深層次的尋路功能的實現啦。 1. 先建立一個簡單的場景 2.將Ground(即建立

自動NavMeshAgent u3d學習總結筆記本

1、Agent Size 物體尺寸控制    Radius 物體的半徑    Height 物體的高度    Base Offset 物體的上下偏移  2、Steering 行動控制    Spped 物體移動的最大速度    Angular Speed 物體轉向時的角速度    Acceleration 物

Unity3D 利用character controller控制人物在場景中移動和利用Navmesh Agent設定人物自動

考慮碰撞的情況下控制人物的行走 在考慮碰撞的情況下,控制人物在場景中移動一般有兩種方法,一種是利用剛體Rigidbody,然後通過施加力或者改變速度來控制人物的移動,另外一種方法就是利用unity自帶的character controller來方便的呼叫函式直

人工智慧: 自動演算法實現(一、廣度優先搜尋)

前言 隨著人工智慧技術的日益發達,我們的生活中也出現了越來越多的智慧產品。我們今天要關注的是智慧家居中的一員:掃地機器人。智慧掃地機器人可以在主人不在家的情況下自動檢測到地面上的灰塵,並且進行清掃。有些更為對路線進行規劃,找到可以清理灰塵的最短路徑,達到省電的

unityUI介面開發商店等介面

商店在手遊中是不可缺少的一部分。通常會有幾種商店,比如公會商店,遠征商店等。 這時候就設計到商店介面重用的問題。嗯,跟我後面要做的基於MVC的揹包系統也有一點思路相同之處。 首先整個大的商店介面Panel,做不做成prefab隨便你,做也可以,不過我覺得大部分商店的外觀還是