首页 理论教育 Unity3D游戏开发教程:寻路案例,实践演示

Unity3D游戏开发教程:寻路案例,实践演示

时间:2023-11-16 理论教育 版权反馈
【摘要】:前面已经介绍了Unity3D 集成开发环境中寻路技术的基本知识,为了能够使这部分内容更容易接受,下面通过一个简单的寻路案例来介绍寻路技术在实际开发过程中的使用。图8-12设置区域遮罩图8-13运行游戏重新烘焙场景,会发现可走区域是蓝色的,不可走区域是紫色的,运行游戏,胶囊体避开障碍物,避开不可走区域,寻找最短路径到达球体位置,如图8-13 所示。

Unity3D游戏开发教程:寻路案例,实践演示

前面已经介绍了Unity3D 集成开发环境中寻路技术的基本知识,为了能够使这部分内容更容易接受,下面通过一个简单的寻路案例来介绍寻路技术在实际开发过程中的使用。

1.游戏角色能够避开障碍物的碰撞,选择最短路径到达目标位置

(1)新建一个工程NavigationDemo,搭建简易场景,保存为“Navigation”,如图8-6所示。

图8-6 搭建场景

图8-7 烘焙场景

(2)选择场景中的两个Cube 方块,创建动画使得游戏运行的时候自动左右运动,这在动画系统章节已经讲过,此处就不再赘述。这两个方块作为场景中的动态障碍物,要挂载导航网格障碍物组件,执行菜单栏的“Component”→“Navigation”→“Nav Mesh Obstacle”命令即可。

(3)选择场景中的其余Cube和Plane,在Inspector视图中将Static左边的选项打钩,即把这些游戏对象都设置为静态。接下来开始路网烘焙,执行菜单栏的“Window”→“Navigation”命令,在打开的Navigation 面板适当调整参数,点击“Bake”按钮,即可开始烘焙,烘焙效果如图8-7 所示。

(4)选择胶囊体游戏对象,执行菜单栏“Component”→“Navigation”→“Nav Mesh Agent”命令,为其添加代理器组件,使用默认参数即可。

(5)由于两个面板彼此分开,所以需要使用分离网格连接。在场景中创建两个Cube,选择其中一个Cube,执行菜单栏的“Component”→“Navigation”→“Off Mesh Link”命令,此时Cube 挂载上了该连接组件,并将这两个Cube 作为组件中Start 和End 的对象,同时取消它们的渲染组件,如图8-8 所示。用同样的方法,给两个面板创建多个链接点,如图8-9 所示。此时重新烘焙场景,可以看到这些链接线,如图8-9 所示。

图8-8 设置连接属性

图8-9 分离网格链接

(6)接下来创建一个新的脚本“NavTest”,挂载给胶囊体游戏对象,具体代码如下:

(7)选择胶囊体对象,在Inspector 视图中,将小球托给“targetPos”变量,运行程序胶囊体自动避开障碍物,找到最捷径的路到达小球的位置。

2. 给角色添加不可行走的层(www.xing528.com)

(1)执行菜单栏“Window”→“Navigation”命令打开Navigation面板,选择Areas面板,添加新的区域“Forbid”,如图8-10所示。接下来选择场景中Notwalkable游戏对象,在Navigation面板的Object面板中,设置它的区域为“Forbid”,如图8-11所示。

图8-10 添加区域

图8-11 设置区域

(2)选择场景中的胶囊游戏对象,对它的Nav Mesh Agent组件的区域遮罩进行修改,即在Area Mask 的下拉选项中取消“Forbid”的勾选,也就是说这个区域胶囊体是无法行走的,如图8-12 所示。

图8-12 设置区域遮罩

图8-13 运行游戏

(3)重新烘焙场景,会发现可走区域是蓝色的,不可走区域是紫色的,运行游戏,胶囊体避开障碍物,避开不可走区域,寻找最短路径到达球体位置,如图8-13 所示。其中标识圆圈部分为“Forbid”区域。

3. 给场景添加小地图,实现当鼠标点击地图中的某个位置,角色会自动寻路到鼠标点击的位置

(1)场景另存为“NavMap”,删除场景中的小球,移除胶囊体游戏对象的“Nav Test”代码组件。

(2)在游戏窗口右上角创建一个小地图,其方法在4.4 小节中已详细说明,这里就不再赘述。

(3)新建一个脚本“NavMap”,挂载给胶囊体,具体代码如下:

(4)配合“Ctrl+S”,保存场景。运行游戏,鼠标点击小地图中的任意位置,胶囊体都会避开障碍物以及避开不可走区域,寻找最短路径到达鼠标点击的位置,如图8-14 所示。

图8-14 运行游戏

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈