Unity自帶NavMesh尋路組件及攝像機跟隨主角

在遊戲中,角色的自動尋路功能很常見,當我們點擊地圖中的某個位置時角色自動走到該位置點,並且還自動繞過障礙物,這個功能看起來很高大上,但是通過Unity自帶的尋路組件很容易實現。廢話不說,先上效果,覺得效果不是想要的可以不用繼續看,畢竟時間是最重要的。
這裏寫圖片描述
這裏寫圖片描述
具體實現分爲3步:
1:創建遊戲物體,本次物體主要有cube表示主角,pointlight照亮鼠標點擊的位置表示選取的位置,Terrain地面。
2:給cube添加NavMeshAgent組件,添加的方式爲:Component/navigation/NavMeshAgent,然後點擊window/navigation調出Navigation編輯器,如圖:
這裏寫圖片描述
選擇Terrain,Navigation編輯器變成下圖:
這裏寫圖片描述
勾選1,2選擇walkable,表示可以走,2這裏下拉還可以選擇not walkable表示不可走,如果設置路障時則選擇這個Notwalkable,最後一個是jump,表示跳躍。然後點擊Bake開始烘焙,渲染出尋路路徑,注意,bake這一步不能忽略。
3:代碼實現:這一步主要實現攝像機跟隨主角和鼠標揀選位置,以及角色自動尋路;具體代碼如下;

using UnityEngine;
using System.Collections;

public class xunlu : MonoBehaviour {

    // Use this for initialization
    public GameObject cub;//這裏表示pointlight來照亮鼠標選取的區域
    NavMeshAgent nav;
    Vector3 vec;
    void Start () {
        nav = GetComponent<NavMeshAgent>();
        vec = transform.position - Camera.main.transform.position;
        //這裏表示相機與主角的偏移,相機跟隨就是靠這個偏移向量實現的
    }

    // Update is called once per frame
    void Update () {
        nav.SetDestination(cub.transform.position);//尋路的目標點,這裏爲cub的位置
        Camera.main.transform.position = transform.position - vec;//向量加減來實現相機跟隨
        RaycastHit hitInfo;
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

        if (Physics.Raycast(ray, out hitInfo))
        {
            //當射線碰撞到Terrain並且鼠標左鍵按下時
            if (hitInfo.transform.gameObject.name == "Terrain" && Input.GetMouseButtonDown(0))
            {
                //讓cube方向朝向點擊位置
                cub.transform.position = hitInfo.point + new Vector3(0,1,0);
            }
        }
    }
}

最後將該腳本掛在主角上,就可以進行測試了,當然,這裏我沒有介紹如何添加路障,添加路障的方法很簡單,在場景裏放好路障,選擇路障,打開navigation 編輯器,勾選Navigation static,設置navigation area爲Not walkable,然後點擊bake即可。

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