Unity的導航系統是人物方便的移動

導航系統:
1.導航網格的烘焙:Window–>Navigation(導航)–>在確保Hierarchy中的 環境因素(地形及地形上的種種環境)都爲Navigation Static ,【 若物體屬性的Navigation Static不被勾選,則該物體被認爲是 可以進行導航的物體(即人物可以穿過這裏)】—>點擊Navigation->Bake 中的 Bake 即進行烘焙

烘焙導航網格後,藍色區域爲可導航的區域【 取消部分物體的可導航性—>Ctrl點選多個物體後,在Navigation->Object 中選中的物體的 Navigation Area 設置爲 Not Walkable】
【是部分物體可以 導航(通過)—>Ctrl點選多個物體後,將這些物體的 Inspector 的 Static 中的 Navigation Static 取消勾選】
重設物體的導航性後,再次Bake即可。

2.使人物在導航網格上運動:在 人物 的 Inspector 中 Add-> Nav Mesh Agent 組件,通過該組件的Radius 和 Height 屬性 確定移動時人物的有效大小。
在Project 中創建 C#腳本,並將腳本拖拽到 人物 的 Inspector 中,打開該C#腳本—>通過射線檢測(通過鼠標點擊,發出豎直射線與地形進行碰撞產生的點)獲取 點的位置–>

    using UnityEngine.AI; //NavMeshAgent 位於這個命名空間,要使用這個命名空間

//獲取Nav Mesh Agent 組件,設爲public 則 Unity 中人物的C#腳本中會自動更新出Agent屬性!
    public NavMeshAgent agent; 

    void Update () {
    if (Input.GetMouseButtonDown(0)) //鼠標左鍵是否按下,0代表左鍵
    {
        /*獲取到一個射線 ray ,Main Camera 用來把一個屏幕座標轉換成一個 ray,
        屏幕座標通過 Input.mousePosition 獲取*/
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

        //使用 RaycastHit 保存碰撞信息 
        RaycastHit hit;

        if (Physics.Raycast(ray, out hit))       /*進行射線檢測--判斷是否發生碰撞,
        傳遞參數 射線 和 out參數 hit,如果發生碰撞,則會將碰撞信息保存到 hit 中*/
        {
            //通過hit.point 獲取碰撞發生的位置
            //print(hit.point); 

            /*使用 獲取的碰撞發生的座標 在Nav Mesh Agent組件中,設置其中的目的地屬性,
            這樣可以使Nav Mesh Agent 朝這個座標運動 !!!*/
            agent.SetDestination(hit.point);
        }
    }
}

在Unity 中人物的C#腳本中自動更新出Agent屬性後,將Nav Mesh Agent 組件拖拽爲Agent的賦值 ---->運行遊戲後,點擊導航網格,人物即向agent的目的地移動。
人物轉向的速度由NavMeshAgent組件中的Angular Speed 控制,其值越大,轉向速度越快。

控制攝像機對人物的跟隨: 首先 調整相機至跟隨的合理的位置(一般爲後上方)—>爲Main Camera (相機) 創建 C#腳本組件(步驟同前)—>【使人物與相機的偏移量始終 等於 兩者初始的偏移量】

//爲獲取跟隨目標的位置,獲取跟隨的目標的Transform組件
//設置爲public,可在Unity中直接顯示!!
public Transform hero;
private Vector3 offset;//定義位置的便偏移

void Start () {

    //先獲取初始偏移,當前位置 - hero的位置。
    offset = transform.position - hero.position;
}

void Update () {

    //在後期保持相機和主角的偏移-->當前位置 = 初始偏移量 + hero現在的位置
    transform.position = offset + hero.position;
	
}

在Unity中,Main Camera 的C#腳本組件中顯示Hero屬性,其賦值爲 拖拽到其中的Hierarchy 中的人物。—>開始運行,點擊場景,相機跟隨人物移動。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章