您的位置:首页 > 移动开发 > Unity3D

Unity 自动寻路

2015-07-03 16:17 453 查看
Unity 自动寻路

利用Unity自带的导航网格寻路,Unity5.0.1 版, 与Unity4.X 版有少许区别。

(1)创建地形



(2)设置

选择 Terrain 在Inapector 面板



(3)查看烘焙参数(Unity5以上的版本会自动烘焙,根据需求可以设置一些参数)

Window -> Lighting







(4)设置 Navigation, Window -> Navigation



点击 Back 即可



效果如下



(5)创建一个 Sphere 作为 寻路者,添加 NavMeshAgent 组件

上面参数想仔细了解的查 API



(6)创建脚本

using UnityEngine;
using System.Collections;

public class Agent : MonoBehaviour {

private NavMeshAgent _agent;

// Use this for initialization
void Start () {
//获取寻路组件
_agent = GetComponent<NavMeshAgent>();
}

// Update is called once per frame
void Update () {

if (_agent == null)
return;

if (Input.GetMouseButtonDown(0))
{
//创建一条摄像机向鼠标点击位置的射线
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if (Physics.Raycast(ray, out hit))
{
//点击位置坐标
Vector3 point = hit.point;
//设置寻路目标
_agent.SetDestination(point);
}
}
}
}


将脚本拖到 Sphere 上,运行,在地形上随便点击,Sphere 自动寻找路线移动过去



(7)设置障碍。在做地形时可以做一些障碍物等不能通过的地方,但是在游戏中会有动态障碍物的需求,比如游戏中建造一个墙,肯定就不允许通过,游戏中又不能重新烘焙场景,下面说下动态添加障碍物的方法

创建一个 Cube作为墙使用,添加 NavMeshObstacle 组件



给Cube添加组件



在此运行,点击墙对面的地面,球将绕过墙走到点击位置



NavMeshAgent 、NavMeshObstacle 组件有很多参数可以利用代码设置,在此只是演示基本用法,如有需求,请查阅Unity API
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: