目录
序言
首先啊,说一哈Navigation导航系统,这是Unity3D中自带的一个组件。使用这个,可以轻松实现AI自动寻路。
当然啦,除去Navigation,比较著名的还有A*导航,但受限于篇幅(和作者的懒惰),先不提它。
一、Navigation的基础介绍
首先是它的组件位置
然后里面会有三个组件
Nav Mesh Agent:物体的导航组件,放在需导航物体上
Nav Mesh Obstacle:可以理解为障碍物
Off Mesh Link会在后面详细介绍。
接着是他的窗口位置
二、场景搭建
不多说了,直接上图
应该都看的懂
三、场景烘焙搭建
首先的首先,一定要把场景Static打开,静态才能导航烘焙!!!
打开Navigation窗口
说一下里面的参数意义:
Agent Radius:距离边界的半径距离
Agent Height: 可以通行的最大高度
Max Slope:物体爬坡的最大角度
Step Height:爬台阶的最大高度
Drop Height:最大下落高度,就是你从坡坡上头跳下来的最大高度
Jump Distance:最大跳跃距离,就是从坡坡这头跳到坡坡那头的最大距离
还有,每次改变场景就要重新渲染一次!
四、物体Nav Mesh Agent说明
首先,先说哈物体组件的参数:
(不知道为什么上传的时候就模糊了)
还是先说说参数含义:
Agent Type:可以理解为物体的导航类型,可以在Navigation窗口更改
Speed:物体移动的最大速度(说最大速度是因为它存在一个加速过程)
Angular Speed:角速度,就是物体旋转的速度,高中讲过
Acceleration:最大加速度,说最大是因为它的速度与时间不成线性关系
Stopping Distance:制动距离,到达后距离目的点的距离
Auto Braking:到达后是否直接停止,就是你勾了这个选项就会有缓冲
Radius:躲避障碍物的半径
Height:同理,躲避障碍物的高度(光说不好理解,可以去改改参数自己看效果)
Quality: 物体躲避的品质,这个的选择与性能挂钩
其余的啊基本不需要去改它。
五、Nav Mesh Areas 与 Agents
Agents:物体移动的属性
与前面讲的差不多,可以对照着看
Areas:导航网格的区域。
主要是后面的Cost。这是根据最短价格寻找路径。
六、Off Mesh Links
这个主要是为了添加导线,在场景中会出现一些绕路的情况,为此,会使用这个组件来解决这个问题。
先看图
这里有两个坨坨,我们上不去,但偏偏就想上去。
那么……
就像这样,两个就被连起来了。
可以实现两地的连接。
七、Nav Mesh Obstacle介绍
Shape:模式选择,有方块和胶囊两个选项。
Center与Size:就是阻挡箱的大小。
Carve:是否重新渲染,如果障碍物是实时运动的,那就不要选,不然消耗资源 。
八、最后一项——实例
先说一下代码中的一些方法:
Move :移动到相对于当前位置的点,可以理解为矢量叠加
ResetPath :清除当前选择的路径
SetDestination :设置目标点,并计算出最优路径
SetPath :设置一条路线
Warp :瞬移到某点,目标点用位矢表示
注意:要先引用 AI模块。
using UnityEngine;
using UnityEngine.AI;
public class PlayerScript : MonoBehaviour
{
public NavMeshAgent player;
public LineRenderer lineRenderer;
void Update()
{
if (Input.GetMouseButtonDown(0))
{
Vector3 Mouse = Input.mousePosition;
Ray ray = Camera.main.ScreenPointToRay(Mouse);
RaycastHit hit;
if(Physics.Raycast(ray,out hit))
{
player.SetDestination(hit.point) ;
Vector3[] path = player.path.corners;
for(int w = 0; w < 2; w++)
{
for (int i = 0; i < path.Length; i++)
{
path[i] = path[i] + new Vector3(0, 1, 0);
}
lineRenderer.SetVertexCount(path.Length);
for (int i = 0; i < path.Length; i++)
{
lineRenderer.SetPosition(i, path[i]);
}
}
}
}
}
}
我也让它实现了画出即将走的路线,也使用了Ray的探测。
这个只能作为例子,还有很多可以添加的地方。
九、最最最后一项——收工
很完美,又搞完了。
这篇讲的U3D,希望我们共同进步。
感谢读者朋友些。
转载要说哈。