8.5 寻路案例
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
}
[7] 选择胶囊体对象,在Inspector视图中,将小球托给“targetPos” 变量,运行程序胶囊体自动避开障碍物,找到最捷径的路到达小球的 位置。
2)给角色添加不可行走的层
[1] 执行菜单栏【Window】→【Navigation】命令打开Navigation面板 ,选择Areas面板,添加新的区域“Forbid”,如 左 下 图所示。接下来选 择场景中Notwalkable游戏对象,在Navigation面板的Object面板中,设 置它的区域为“Forbid”,如右下图所示。
[2]选择场景中的胶囊游戏对象,对它的Nav Mesh Agent组件的区域 遮罩进行修改,即在Area Mask的下拉选项中取消“Forbid”的勾选 ,也就是说这个区域胶囊体是无法行走的。
[3]重新烘焙场景,会发现可走区域是蓝色的,不可走区域是紫色的 ,运行游戏,胶囊体避开障碍物,避开不可走区域,寻找最短路径到 达球体位置,如图所示,其中标识圆圈部分为“Forbid”区域。
[6]接下来创建一个新的脚本“NavTest”,挂载给胶囊体游戏对象, 具体代码如下:
public class NavTest : MonoBehaviour { public Transform targetPos;//目标位置 private NavMeshAgent playerNav;//声明代理器变量 void Start () { //获取代理器组件 playerNav=transform.GetComponent<NavMeshAgent>(); } void Update () { //SetDestination(目标位置) playerNav.SetDestination(targetPos.position); }
[3]选择场景中的其余Cube和Plane,在Inspector视图中将Static左边的选项
打勾,即
这些游戏对象都设置为静态。接下来开始路【Navigation】命令,在打开的Navigation面板适当调
整参数,点击【Bake】按钮,即可开始烘焙,烘焙效果如下图所示。
[4]选择胶囊体游戏对象,执行菜单栏【Component】→【Navigation】→ 【Nav Mesh Agent】命令,为其添加代理器组件,使用默认参数即可。
[5]由于两个面板彼此分开,所以需要使用分离网格连接。在场景中创建两个 Cube,选择其中一个Cube,执行菜单栏的【Component】→【Navigation 】→【Off Mesh Link】命令,此时Cube挂载上了该连接组件,并将这两个 Cube作为组件中Start和End的对象,同时取消它们的渲染组件,如图8-8所示 。用同样的方法,给两个面板创建多个链接点,如 左 下 图所示。此时重新烘焙 场景,可以看到这些链接线,如右下图所示。
3)给场景添加小地图,实现当鼠标点击地图中的某个位置,角色会自 动寻路到鼠标点击的位置。
谢谢观看
自动寻路系统
1)游戏角色能够避开障碍物的碰撞,选择最短路径到达目标位置
[1]新建一个工程NavigationDemo,搭建简易场景如图所示,保存场景 “Navigation”。
[2]选择场景中的两个Cube方块,创建动 画使得游戏运行的时候自动左右运动,这 在动画系统章节我们已经讲诉过,这里就 不再赘述。这两个方块作为场景中的动态 障碍物,要挂载导航网格障碍物组件,执 行菜单栏的【Component】→【 Navigation】→【Nav Mesh Obstacle】 命令即可。
[7] 选择胶囊体对象,在Inspector视图中,将小球托给“targetPos” 变量,运行程序胶囊体自动避开障碍物,找到最捷径的路到达小球的 位置。
2)给角色添加不可行走的层
[1] 执行菜单栏【Window】→【Navigation】命令打开Navigation面板 ,选择Areas面板,添加新的区域“Forbid”,如 左 下 图所示。接下来选 择场景中Notwalkable游戏对象,在Navigation面板的Object面板中,设 置它的区域为“Forbid”,如右下图所示。
[2]选择场景中的胶囊游戏对象,对它的Nav Mesh Agent组件的区域 遮罩进行修改,即在Area Mask的下拉选项中取消“Forbid”的勾选 ,也就是说这个区域胶囊体是无法行走的。
[3]重新烘焙场景,会发现可走区域是蓝色的,不可走区域是紫色的 ,运行游戏,胶囊体避开障碍物,避开不可走区域,寻找最短路径到 达球体位置,如图所示,其中标识圆圈部分为“Forbid”区域。
[6]接下来创建一个新的脚本“NavTest”,挂载给胶囊体游戏对象, 具体代码如下:
public class NavTest : MonoBehaviour { public Transform targetPos;//目标位置 private NavMeshAgent playerNav;//声明代理器变量 void Start () { //获取代理器组件 playerNav=transform.GetComponent<NavMeshAgent>(); } void Update () { //SetDestination(目标位置) playerNav.SetDestination(targetPos.position); }
[3]选择场景中的其余Cube和Plane,在Inspector视图中将Static左边的选项
打勾,即
这些游戏对象都设置为静态。接下来开始路【Navigation】命令,在打开的Navigation面板适当调
整参数,点击【Bake】按钮,即可开始烘焙,烘焙效果如下图所示。
[4]选择胶囊体游戏对象,执行菜单栏【Component】→【Navigation】→ 【Nav Mesh Agent】命令,为其添加代理器组件,使用默认参数即可。
[5]由于两个面板彼此分开,所以需要使用分离网格连接。在场景中创建两个 Cube,选择其中一个Cube,执行菜单栏的【Component】→【Navigation 】→【Off Mesh Link】命令,此时Cube挂载上了该连接组件,并将这两个 Cube作为组件中Start和End的对象,同时取消它们的渲染组件,如图8-8所示 。用同样的方法,给两个面板创建多个链接点,如 左 下 图所示。此时重新烘焙 场景,可以看到这些链接线,如右下图所示。
3)给场景添加小地图,实现当鼠标点击地图中的某个位置,角色会自 动寻路到鼠标点击的位置。
谢谢观看
自动寻路系统
1)游戏角色能够避开障碍物的碰撞,选择最短路径到达目标位置
[1]新建一个工程NavigationDemo,搭建简易场景如图所示,保存场景 “Navigation”。
[2]选择场景中的两个Cube方块,创建动 画使得游戏运行的时候自动左右运动,这 在动画系统章节我们已经讲诉过,这里就 不再赘述。这两个方块作为场景中的动态 障碍物,要挂载导航网格障碍物组件,执 行菜单栏的【Component】→【 Navigation】→【Nav Mesh Obstacle】 命令即可。