角色控制器+Nav導航網格尋址

(一)Character Controller角色控制器組件

圖片1.png

Paste_Image.png

做過小Demo,讓游戲物體朝向鼠標點擊的地面位置移動,代碼如下:


Paste_Image.png
public class charter : MonoBehaviour
{
    private CharacterController c;
    void Start ()
    {
        c = GetComponent<CharacterController>();
    }
    void Update ()
    {

        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
        RaycastHit hit;
        if (Physics.Raycast(ray,out hit ))
        {
            if (hit.collider.name.Equals("Cube"))
            {
                if (Input.GetMouseButton(0))
                {
                    Vector3 p = hit.point-transform.position;
                    c.Move(p*Time.deltaTime*5f);
                }
            }
        }
    }
}

(二)Nav Mesh Agent:尋路、尋址

如果角色面前有障礙,鼠標點擊到障礙物后邊,如何移動,我們可以使用Nav Mesh Agent組件。


圖片2.png

Paste_Image.png

Paste_Image.png

首先我們創(chuàng)建一個障礙物一個游戲對象和一個地面,然后我們給游戲對象添加Nav Mesh Agent組件和移動腳本


Paste_Image.png
代碼如下
public class charter : MonoBehaviour
{
    private NavMeshAgent c;
    void Start()
    {
        c = GetComponent<NavMeshAgent>();
    }
    void Update()
    {
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
        RaycastHit hit;
        if (Physics.Raycast(ray, out hit))
        {
            if (!hit.collider.name.Equals("Plane"))
            {                           
                   return;         
            }
            Vector3 p = hit.point;
            c.SetDestination(p);
        }
    }
}

然后我們我們設置地面和障礙物的靜態(tài)


Paste_Image.png

然后我們再去給地面和障礙物烘焙,最后別忘記Bake哦


Paste_Image.png

Paste_Image.png
這樣我們就完成了,運行試試
OO.gif

(三)Navigation導航

Paste_Image.png

Paste_Image.png

Object:物體參數(shù)面板
Navigation Static:勾選后表示該對象參與導航網格的烘培。
OffMeshLink Generation:勾選后可跳躍(Jump)導航網格和下落(Drop)。
Bake:烘培參數(shù)面板
Radius:具有代表性的物體半徑,半徑越小生成的網格面積越大。
Height:具有代表性的物體的高度。
Max Slope:斜坡的坡度。
Ste Height:臺階高度。
Drop Height:允許最大的下落距離。
Jump Distance:允許最大的跳躍距離。
Min Region Area:網格面積小于該值則不生成導航網格。
Width Inaccuracy:允許最大寬度的誤差。
Height Inaccuracy:允許最大高度的誤差。
Height Mesh:勾選后會保存高度信息,同時會消耗一些性能和存儲空間。

(四)offMeshLink:從網鏈接

Paste_Image.png

屬性:

開始 (Start) 分離網格鏈接的開始對象。
結束 (End) 分離網格鏈接的結束對象。
成本覆蓋 (Cost Override) 如果值為正,則在路徑請求處理中計算路徑成本時使用該屬性。否則,我們使用默認成本(此游戲對象所屬的層的成本)。如果“成本覆蓋”(Cost Override) 設置為值 3.0,則在分離網格鏈接上移動的成本比在默認導航網格區(qū)域中移動相同距離的成本高三倍。 此屬性可在運行時編輯,無需重新烘焙''
雙向 (Bi Directional) 如果此屬性為“開”(on),則可以雙向穿越鏈接,如果它為“關”(off),則只能按從“開始”(Start) 到“結束”(End) 的方向穿越鏈接。
已激活 (Activated) 指定尋路器是否實際使用此鏈接。此屬性可在運行時編輯,無需重新烘焙。

如何從一個地面跳躍到另一個地面

首先我們在創(chuàng)建另一Plane(1),然后在第一個Plane上添加Off Mesh Link上并且將兩個地面連接起來,然后我們給新添加的地面也添加今天值,再然后我們給新添加的地面也烘焙好


Paste_Image.png

然后我們在烘焙界面Bake上修改其距離


Paste_Image.png
并且將移動的代碼修改
Paste_Image.png

這樣我們就完成了


OK.gif

(五)Nav Mesh Obstacle

Paste_Image.png

在導航網格上的固定障礙物,可以作為烘焙過程中的一部分設置。
但是,也可能在場景具有動態(tài)阻擋物,這將通過Agent移動來避開。
這種動態(tài)障礙物,可以指定Navmesh Obstacle組
可以被添加任何游戲物體上并隨該對象移動。

Radius 半徑 : 障礙物圓柱的半徑
Height 高度 : 障礙物圓柱的高度
Carve:是否打開在導航網格挖洞的模式
Move Threshold:當模式為Carve時,此物體的移動距離超過這個閥值后,更新當前的導航網格(重新挖洞)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 角色控制是游戲設計中必不可少的一個設計環(huán)節(jié),這一節(jié)我們講一講如何制作基本的角色運動控制交互邏輯。 因為是簡單實例教...
    shimmery閱讀 9,859評論 5 20
  • 一、描述:一個角色在特定環(huán)境下自動到達指定目標。導航網格(NavMesh)1、設置導航靜態(tài)物體(Navigatio...
    斗魁閱讀 868評論 0 0
  • NavMesh(導航網格)是3D游戲世界中用于實現(xiàn)動態(tài)物體自動尋路的一種技術,將游戲中復雜的結構組織關系簡化為帶有...
    李亞楠0219閱讀 1,519評論 0 2
  • 泉城六月,須臾十日,佳年萍水相聚。齊魯兒女,颯颯展英顏。玉水亭臺美交院,催新舟,泛泊浩瀚。倚闌干,流光晝...
    懜_0e7b閱讀 170評論 0 0
  • 問:為什么會選擇創(chuàng)業(yè)? 答:想做一件自己想做的事情,并獲得將來的自由。 問:為什么選擇做成人鋼琴培訓? 答:覺得每...
    看科技閱讀 523評論 0 0

友情鏈接更多精彩內容