在遊戲中,角色的自動尋路功能很常見,當我們點擊地圖中的某個位置時角色自動走到該位置點,並且還自動繞過障礙物,這個功能看起來很高大上,但是通過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即可。