1、 第1页9.1.1 地形的创建vUnity3D游戏引擎中可以通过两种方式创建地形,一种是通过游戏引擎中可以通过两种方式创建地形,一种是通过Unity内置的内置的地形引擎,另一种则是将带有大量地形信息的高度图导入进地形引擎地形引擎,另一种则是将带有大量地形信息的高度图导入进地形引擎 (1)进入)进入Unity3D集成开发环境中,利用快捷键集成开发环境中,利用快捷键Ctrl+N新建一场景,点新建一场景,点击击“GameObject”“3D Object”“Terrain”菜单创建一个地形,如图菜单创建一个地形,如图9-1所示。游戏组成对象列表和游戏资源列表中都会出现相应的地形信息所示。游戏组成对象
2、列表和游戏资源列表中都会出现相应的地形信息与地形文件,如图与地形文件,如图9-2所示。所示。第2页9.1.1 地形的创建v(2)选中)选中Terrain游戏对象,其属性面板中会出现游戏对象,其属性面板中会出现Terrain组件和组件和Terrain Collider组件,如图组件,如图9-3所示。前者负责地形的基本功能,后者充当了地形所示。前者负责地形的基本功能,后者充当了地形的物理碰撞器。的物理碰撞器。Terrain Collider组件属于物理引擎方面的组件,实现了地组件属于物理引擎方面的组件,实现了地形的物理模拟计算。形的物理模拟计算。 第3页9.1.1 地形的创建v其组件的相关参数其组
3、件的相关参数 :vMaterial地形的物理材质,可通过设置物理材质的相关参数分别开发出草地地形的物理材质,可通过设置物理材质的相关参数分别开发出草地和戈壁滩的效果和戈壁滩的效果vTerrain Date地形数据参数,用于存储地形高度和其他重要的相关信息地形数据参数,用于存储地形高度和其他重要的相关信息vEnable Tree Collider是否启用树木的碰撞检测是否启用树木的碰撞检测第4页9.1.2 地形的基本操作Terrain组件下有一排按钮,分别对应了地形的各项操作和设置组件下有一排按钮,分别对应了地形的各项操作和设置 :v(1)选中)选中Terrain组件下的第一个按钮,其下的文本区
4、域中会显示出该按钮组件下的第一个按钮,其下的文本区域中会显示出该按钮的名称以及其操作方式,如图的名称以及其操作方式,如图9-4所示。该按钮可以调整地形的凹凸程度,所示。该按钮可以调整地形的凹凸程度,以笔刷的方式设置地形的坡度。以笔刷的方式设置地形的坡度。Brushes栏下有各种各样的笔刷样式,笔栏下有各种各样的笔刷样式,笔者可以根据开发需要选择不同的笔刷样式。者可以根据开发需要选择不同的笔刷样式。第5页9.1.2 地形的基本操作Terrain组件下有一排按钮,分别对应了地形的各项操作和设置组件下有一排按钮,分别对应了地形的各项操作和设置 :v(2)通过点击和拖动鼠标,可以使鼠标点过的地方凸起,
5、同时按下)通过点击和拖动鼠标,可以使鼠标点过的地方凸起,同时按下“Shift”键可以实现下凹的功能。需要注意的是,进行下凹的操作时,不能使地形键可以实现下凹的功能。需要注意的是,进行下凹的操作时,不能使地形水平面低于地形最小高度。即地形创建时的初始高度是地形的最低限制,水平面低于地形最小高度。即地形创建时的初始高度是地形的最低限制,之后的操作不能使地形低于该高度。之后的操作不能使地形低于该高度。vBrush Size笔刷大小,含义为笔刷的直径大小,单位为米笔刷大小,含义为笔刷的直径大小,单位为米vOpacity笔刷的强度大小,其值越大,地形变化的幅度越大,反之则越小笔刷的强度大小,其值越大,地
6、形变化的幅度越大,反之则越小第6页9.1.2 地形的基本操作(3)选中第二个按钮,将其)选中第二个按钮,将其Height参数大小修改为参数大小修改为30,单位是米。并点击,单位是米。并点击Flatten按钮,其按钮,其作用是将整个地形的高度设置为指定的作用是将整个地形的高度设置为指定的Height。再次选中。再次选中Raise/Lower Terrain按钮,按住按钮,按住Shift键即可实现地形的下凹效果,如图键即可实现地形的下凹效果,如图9-6所示:所示:第7页9.1.2 地形的基本操作(4)除了)除了Raise/Lower Terrain按钮可以调整地形的局部高度外,按钮可以调整地形的局
7、部高度外,Paint Height按钮也可以实现该功能,按钮也可以实现该功能,如图如图9-5所示。与前一个按钮不同的是,该按钮有一个参数可以设置地形高度值,被调整的局部地形高所示。与前一个按钮不同的是,该按钮有一个参数可以设置地形高度值,被调整的局部地形高度值不会超过该数值:度值不会超过该数值:第8页9.1.2 地形的基本操作(5)Paint Height按钮中各项参数的功能如表按钮中各项参数的功能如表9-3所列。通过修改该按钮的各项参数,可以对地形进行所列。通过修改该按钮的各项参数,可以对地形进行局部的调整,实现地形在限定高度范围内上升或下降的效果。该按钮也可制作特定高度的地形,如图局部的调
8、整,实现地形在限定高度范围内上升或下降的效果。该按钮也可制作特定高度的地形,如图9-7所示:所示:第9页9.1.2 地形的基本操作(6)地形制作过程中,由于地形的高度差较大会导致部分地形显的特别突兀,或者使山峰过于尖锐,)地形制作过程中,由于地形的高度差较大会导致部分地形显的特别突兀,或者使山峰过于尖锐,这时就需要用到平滑处理这时就需要用到平滑处理Smooth Height,如图,如图9-8所示。该按钮可以使地形更加平滑,将图所示。该按钮可以使地形更加平滑,将图9-7突突兀的地方做平滑处理后的效果如图兀的地方做平滑处理后的效果如图9-9所示。所示。第10页9.1.3 地形的纹理添加及设置参数(
9、1)调整好地形的基本形状后,点击)调整好地形的基本形状后,点击Paint Texture按钮可以为其添加纹理图,如图按钮可以为其添加纹理图,如图9-10所示。图片纹理所示。图片纹理以涂画的方式进行,将单元图片赋给画笔,画笔所经过的地方将所对应的纹理图贴到地形上。以涂画的方式进行,将单元图片赋给画笔,画笔所经过的地方将所对应的纹理图贴到地形上。Paint Texture的各项参数如表的各项参数如表9-5所列:所列:属性含义Brush Size笔刷大小,含义为笔刷的直径大小,单位为米Opacity笔刷的强度值,该值越大,制作地形时,地形变化的幅度越大,反之则越小Target Strength笔刷的
10、涂抹强度值,代表的是与地形原来纹理图的混合比例值第11页9.1.3 地形的纹理添加及设置参数(2)下面需要为画笔赋上纹理图,这里需要用到)下面需要为画笔赋上纹理图,这里需要用到Unity游戏开发引擎中的标准游戏开发引擎中的标准资源包。在游戏资源列表中右击资源包。在游戏资源列表中右击Import PackageEnvironment导入环境资导入环境资源包,如图源包,如图9-11所示。所示。第12页9.1.3 地形的纹理添加及设置参数(3)环境资源包导入完成后,)环境资源包导入完成后,EnvironmentSpeedTree文件夹下的三个文件文件夹下的三个文件夹中包含大量内置的纹理图,如图夹中包
11、含大量内置的纹理图,如图9-12所示。可以从此文件及中选取合适的纹所示。可以从此文件及中选取合适的纹理图。点击理图。点击Terrain组件下组件下“Edit Texture”“Add Texture”选项添加纹理,如选项添加纹理,如图图9-13所示。所示。第13页9.1.3 地形的纹理添加及设置参数(4)场景中弹出的)场景中弹出的Add Terrain Texture面板中,可以通过点击面板中,可以通过点击Select按钮添加普通贴图和法线贴图,在按钮添加普通贴图和法线贴图,在弹出的弹出的Select Texture2D面板中选择合适的纹理图或者是法线贴图,如图面板中选择合适的纹理图或者是法线
12、贴图,如图9-14所示。可以通过调整所示。可以通过调整Metallic值来调整纹理图的明暗程度,点击值来调整纹理图的明暗程度,点击Add按钮完成纹理图的添加。如图按钮完成纹理图的添加。如图9-15所示。所示。第14页9.1.3 地形的纹理添加及设置参数(5)为地形添加第一副纹理图时,该纹理图会铺满整个地形,还可以通过点击)为地形添加第一副纹理图时,该纹理图会铺满整个地形,还可以通过点击Edit Texture按钮选中按钮选中Edit Texture菜单对所选中的纹理图进行编辑,如图菜单对所选中的纹理图进行编辑,如图9-16-1所示。地形引擎还支持添加多幅纹理图,并通所示。地形引擎还支持添加多幅
13、纹理图,并通过笔刷改变地形中某部分的纹理图,效果如图过笔刷改变地形中某部分的纹理图,效果如图9-16-2所示。所示。第15页9.1.3 地形的纹理添加及设置参数(6)地形引擎还可以为地形添加花草树木,点击)地形引擎还可以为地形添加花草树木,点击Place Trees按钮进入种植树木功能区。树木按钮进入种植树木功能区。树木Prefab添添加的方式与添加纹理图的方式相同,如图加的方式与添加纹理图的方式相同,如图9-17所示。以涂画的方式批量地进行树木的种植,开发人员只需所示。以涂画的方式批量地进行树木的种植,开发人员只需提供单棵树木的预制件资源即可。效果如图提供单棵树木的预制件资源即可。效果如图9
14、-18所示。其各项参数如表所示。其各项参数如表9-6所列。所列。第16页9.1.3 地形的纹理添加及设置参数(7)除了进行树木的种植,开发人员还可以在地形上铺设花草等修饰物,点击)除了进行树木的种植,开发人员还可以在地形上铺设花草等修饰物,点击“Paint Details”按钮进入按钮进入该功能区,如图该功能区,如图9-19所示。该按钮参数与所示。该按钮参数与Place Trees类似,主要区别是前者可以使用标志板和网格对象类似,主要区别是前者可以使用标志板和网格对象作为资源对象,而后者只可以使用预制件。效果如图作为资源对象,而后者只可以使用预制件。效果如图9-20所示。参数如表所示。参数如表
15、9-7所列。所列。属性含义Brush Size画笔大小,其实际含义为画笔的直径长度,以米为单位Opacity笔刷的强度值,该值越大,制作地形时,地形变化的幅度越大,反之则越小Target Strength画笔涂抹强度值,该值范围为0-1,代表了与地形原来花草的混合比例大小第17页9.1.3 地形的纹理添加及设置参数(8)点击)点击Edit Texture按钮选中按钮选中Edit菜单可对所选中的纹理图进行编辑,如图菜单可对所选中的纹理图进行编辑,如图9-21所示。弹出的所示。弹出的Edit Grass Texture面板中可以对铺设的纹理图的宽度、高度以及颜色等参数进行设置,如图面板中可以对铺设
16、的纹理图的宽度、高度以及颜色等参数进行设置,如图9-22所示。参数所示。参数如表如表9-8所列。所列。第18页9.1.3 地形的纹理添加及设置参数(9)最后可以对地形进行一些参数设置,地形设置面板中,可以设置地形的大小及精度等参数,还可以)最后可以对地形进行一些参数设置,地形设置面板中,可以设置地形的大小及精度等参数,还可以给地形添加一个模拟风,使地形中的花草树木会非常生动地随风摆动,点击给地形添加一个模拟风,使地形中的花草树木会非常生动地随风摆动,点击“Terrain Settings”按钮进入按钮进入地形设置功能区,如图地形设置功能区,如图9-23、9-24所示。所示。第19页9.1.3
17、地形的纹理添加及设置参数(10)Terrain Settings面板中的各项参数功能如表面板中的各项参数功能如表9-9所列。该功能区中,开发人员可以对地形的整体参所列。该功能区中,开发人员可以对地形的整体参数、分辨率进行详细地设置。数、分辨率进行详细地设置。属性含义属性含义Base Terrain基于地形的参数修改Draw是否显示地形Cast Shadows是否进行阴影的投射Thickness物理引擎中该地形的可碰撞厚度Tree & Detail Object树木和花草等游戏对象Draw是否显示花草树木Bake Light Probes For Tress烘焙光照是否烘焙到树上Detail D
18、istance细节距离,与相机间的细节可显示的距离Collect Detail Patches进行细节补丁的收集Detail Density细节的密集程度Tree Distance树木的可视距离值Max Mesh Trees允许出现的网格类型的树木的最大数量Wind Settings For Grass草的风向设置Speed吹过草地风的风速Size模拟风可影响的范围大小Bending草被风吹弯的弯曲程度Grass Tint被风吹过时草的色调Resolution分辨率的设置Terrain Width地形的总宽度值Terrain Length地形的总长度值Terrain Height地形的总高度值
19、Heightmap Resolution地形灰度度的精度第20页9.1.3 地形的纹理添加及设置参数(10)Terrain Settings面板中的各项参数功能如表面板中的各项参数功能如表9-9所列。该功能区中,开发人员可以对地形的整体参所列。该功能区中,开发人员可以对地形的整体参数、分辨率进行详细地设置。数、分辨率进行详细地设置。Detail Resolution细节精度值,该值越大,地形显示的细节越精细,但随之占用的资源也会越多Detail Resolution Per Patch每一小块地形所设置的细节精度值Control Texture Resolution将不同的纹理插值绘制在地形上
20、时所设置的精度值Base Texture Resolution地形上绘制基础纹理时所采用的精度值Heightmap高度图,可以导入高度图,或者将制作好的地形高度图导出Material材质类型,选项分别是标准、漫反射、高光、自定义,使用自定义时需要制定材质Reflection Probes反射探头类型,选项分别是关闭、混合探头、混合和天空盒探头、一般Pixel Error像素误差,表示地形的绘制精度,该值越大,地形的结构细节越少Base Map Dist基础图距,当与地形的距离超过该值时,则以低分辨率的纹理进行显示Billboard Start标志板起点,以标志板形式出现的树木与相机的距离Fad
21、e Length淡变长度,树从标志板转换成网格模式时,所使用的距离增量第21页9.1.4 高度图的使用(1)高度图是一张带有灰阶的图片,图片中的每个像素具有不同的灰度值,这)高度图是一张带有灰阶的图片,图片中的每个像素具有不同的灰度值,这些灰度值代表了不同的高度。像素的灰度值越大,表示对应的高度越高,像素些灰度值代表了不同的高度。像素的灰度值越大,表示对应的高度越高,像素的灰度值越小,表示对应的高度越低。的灰度值越小,表示对应的高度越低。(2)开发人员可以在不同的开发工具上制作高度图,笔者利用的)开发人员可以在不同的开发工具上制作高度图,笔者利用的Photoshop CS6(以下简称(以下简称
22、PS)。首先准备好一张彩色图片,将其导入进)。首先准备好一张彩色图片,将其导入进PS,步骤如图,步骤如图9-25所示。弹出的面板中选择准备好的图片导进所示。弹出的面板中选择准备好的图片导进PS(制作高度图的方法有好多种,(制作高度图的方法有好多种,也可以采用其他方式)。也可以采用其他方式)。(3)导入完成后,点击工具栏中的图像)导入完成后,点击工具栏中的图像模式模式灰度菜单,如图灰度菜单,如图9-26所示。弹所示。弹出的面板选择出的面板选择“扔掉扔掉”按钮,此时整幅图片变为灰色,如图按钮,此时整幅图片变为灰色,如图9-27所示。需要注所示。需要注意的是,意的是,Unity中地形使用的高度图的分
23、辨率为中地形使用的高度图的分辨率为1+32*X,X为任意正整数,则高为任意正整数,则高度图最小的分辨率为度图最小的分辨率为33。第22页9.1.4 高度图的使用(4)接下来修改该图片的分辨率,点击)接下来修改该图片的分辨率,点击PS的工具栏中的图像的工具栏中的图像图像大小,如图像大小,如图图9-28所示。弹出的面板中勾掉所示。弹出的面板中勾掉“约束比例约束比例”,勾选,勾选“重定图像像素重定图像像素”复选框,复选框,笔者在像素大小一栏中将宽度和高度像素修改为笔者在像素大小一栏中将宽度和高度像素修改为65,点击确定按钮确定修改选,点击确定按钮确定修改选项,如图项,如图9-29所示。所示。 (5)
24、像素大小修改完成后需将该高度图盗图,目前)像素大小修改完成后需将该高度图盗图,目前Unity只支持只支持RAW格式的高格式的高度图,选择弹出面板的格式下拉列表中的(度图,选择弹出面板的格式下拉列表中的(*.RAW)格式,如图)格式,如图9-30所示。将所示。将高度图保存某一路径下,打开高度图保存某一路径下,打开Unity集成开发环境,在原来的场景中新建一个集成开发环境,在原来的场景中新建一个Terrain。(6)选中新建的)选中新建的Terrain游戏对象,选择其游戏对象,选择其Terrain组件中的设置按钮,选择组件中的设置按钮,选择 “Import Raw”按钮,如图按钮,如图9-31所示
25、。选择制作好的高度图导入所示。选择制作好的高度图导入Unity,在,在Import Heightmap面板将高度图的面板将高度图的Y值修改为值修改为50,Terrain效果如图效果如图9-32所示。所示。第23页9.2.1 拖痕渲染器的基础知识拖痕渲染器,就是用于制作物体后方的拖痕效果来表明这个物体正在移动。拖痕渲染器,就是用于制作物体后方的拖痕效果来表明这个物体正在移动。 挂载拖痕渲染器的游戏对象上不可以有其他种类的渲染器,一般开发过程中,挂载拖痕渲染器的游戏对象上不可以有其他种类的渲染器,一般开发过程中,拖痕渲染器都会挂载到一个空游戏对象上,并将其摆放在合适的位置上。拖痕渲染器都会挂载到一
26、个空游戏对象上,并将其摆放在合适的位置上。主要属性主要属性Materials 材质材质Trail Width 拖痕宽度拖痕宽度Trail Colors 拖痕颜色拖痕颜色Min Vertex Distance 最小顶点距离最小顶点距离第24页9.2.2刹车痕案例制作 1.案例效果案例效果第25页9.2.2刹车痕案例制作 2.制作流程制作流程(1)首先打开)首先打开Unity集成开发环境,新建一个工程并重命名为集成开发环境,新建一个工程并重命名为“Trail_Demo”,进入工程后保存当前场景,进入工程后保存当前场景并重命名为并重命名为“Trail _Demo”,然后在,然后在Assets目录下新
27、建三个文件夹分别命名为目录下新建三个文件夹分别命名为“Texture”、“C#”和和“model”,分别用来放置天空纹理图、脚本文件以及模型文件,如图,分别用来放置天空纹理图、脚本文件以及模型文件,如图9-36所示。所示。第26页9.2.2刹车痕案例制作 2.制作流程制作流程(2)制作案例中的使用的汽车模型及相关脚本。)制作案例中的使用的汽车模型及相关脚本。(3)将需要的刹车痕贴图()将需要的刹车痕贴图(shachehen.png)、刹车板贴图()、刹车板贴图(anniu.png)和路面贴图(和路面贴图(road.png)导入)导入Texture文件夹中。文件夹中。(4)首先在场景中创建一个)
28、首先在场景中创建一个Plane用来充当地面,将导入的地面贴图用来充当地面,将导入的地面贴图(road.png)添加到)添加到Plane对象上,然后将对象上,然后将Plane在在x轴方向的轴方向的Scale尺寸设置尺寸设置为为12,如图,如图9-39所示。所示。(5)路面完成后,将)路面完成后,将Assets目录下的汽车预制件(目录下的汽车预制件(Car)拖入到场景中,并将)拖入到场景中,并将其摆放在路面的一端,使摄像机成为汽车的子物体,并调整到合适的位置其摆放在路面的一端,使摄像机成为汽车的子物体,并调整到合适的位置 。(6)下面创建两个空物体分别命名为)下面创建两个空物体分别命名为“Trai
29、l_One”和和“Trail_Two”,并在这,并在这两个空对象上挂载拖痕渲染器。两个空对象上挂载拖痕渲染器。第27页9.2.2刹车痕案例制作 2.制作流程制作流程(7)接下来将导入的刹车痕贴图()接下来将导入的刹车痕贴图(shachehen.png)添加到创建的两个对象)添加到创建的两个对象上。上。 (8)下面要使用)下面要使用UGUI系统在屏幕上绘制以及按钮用来控制刹车。系统在屏幕上绘制以及按钮用来控制刹车。 (9)接下来需要编写脚本,来控制汽车的加速与刹车。)接下来需要编写脚本,来控制汽车的加速与刹车。 (10)脚本编写完成后将其挂载到)脚本编写完成后将其挂载到Car游戏对象上,在其中添
30、加两个后轮的车游戏对象上,在其中添加两个后轮的车轮碰撞器,设置力矩以及添加两个拖痕渲染器。轮碰撞器,设置力矩以及添加两个拖痕渲染器。(11)完成后再)完成后再Event Trigger的设置面板中点击的设置面板中点击Add New Event Type,再弹,再弹出的列表中选择出的列表中选择PointerDow,然后按照同样的方式再次添加一个,然后按照同样的方式再次添加一个Event Type并选择并选择PointerUp。将挂有脚本的。将挂有脚本的Car对象拖拽到其左侧的赋值栏中,并在右侧对象拖拽到其左侧的赋值栏中,并在右侧选择选择clickDown和和clickup两个函数,如图两个函数,
31、如图9-47所示。完成后点击播放按钮即可所示。完成后点击播放按钮即可查看程序运行效果。查看程序运行效果。 第28页9.3.1自动寻路技术基础知识1. 代理器代理器Nav Mesh Agent常用参数常用参数参 数 名含 义参 数 名含 义Radius代理器半径Auto Traverse OffMesh Link是否自动穿过自定义路线Height代理器高度Auto Braking是否自动停止无法到达目的地的路线Speed代理器移动速度Auto Repath原有路线发现变化时是否重新寻路Angular Speed代理器转向速度Base offset代理器相对导航网格的高度偏移Acceleratio
32、n代理器加速度Stopping Distance代理器到达时与目标点的距离如果使用代理器移动角色时,角色将忽略一切碰撞,也就是说如果没有进行路网烘焙或没有使用动态障碍物组件(Nav Mesh Obstacle)的物体即使带有碰撞器,角色在移动时也会穿透这个物体。 第29页2. 分离网格链接分离网格链接Off Mesh Link如果场景中两部分静态几何体彼此分离,没有连接在一起的话当完成路网烘焙后,代理器无法如果场景中两部分静态几何体彼此分离,没有连接在一起的话当完成路网烘焙后,代理器无法从其中一个物体上寻路到另一个物体上,为了能够使代理器可以在两个彼此分离的物体间进行从其中一个物体上寻路到另一
33、个物体上,为了能够使代理器可以在两个彼此分离的物体间进行寻路,就需要使用分离网格链接(寻路,就需要使用分离网格链接(Off Mesh Link) 常用参数常用参数参 数 名含 义参 数 名含 义Start分离网格链接的开始点物体Bi Directional是否允许代理器在开始点和结束点间双向移动End分离网格链接的结束点物体Activated是否激活该路线Navigation Area设置该导航区域为可行走、不可行走和跳跃三种状态Cost Override开销覆盖,如果将该值设置为2.0,那么在计算路径时的开销是默认的计算开销的两倍。Auto Update Position勾选该参数后,运行游
34、戏时,如果开始点或结束点会发生移动,那么路线也会随之发生变化。第30页3. 导航网格障碍物导航网格障碍物Nav Mesh Obstacle 导航网格中对于固定的障碍物,开发时可以通过路网烘焙的方式使代理器无法穿透,但游戏中导航网格中对于固定的障碍物,开发时可以通过路网烘焙的方式使代理器无法穿透,但游戏中常常会有移动的障碍物,这种动态障碍物无法进行烘焙,为了使代理器也能够与其发生正常的常常会有移动的障碍物,这种动态障碍物无法进行烘焙,为了使代理器也能够与其发生正常的碰撞,这就需要使用导航网格障碍物碰撞,这就需要使用导航网格障碍物 。常用参数常用参数参 数 名含 义参 数 名含 义Shape碰撞器
35、的形态(Box、Capsule)Size动态障碍物碰撞器的尺寸Center动态障碍物碰撞器的中点位置Carve是否允许被代理器穿入第31页4. 路网烘焙路网烘焙Bake想要实现寻路功能,除了使用上述的三种组件外,还需要对路网进行烘焙,即想要实现寻路功能,除了使用上述的三种组件外,还需要对路网进行烘焙,即指定哪些对象可以通过、哪些对象不可移动通过。指定哪些对象可以通过、哪些对象不可移动通过。 常用参数常用参数参 数 名含 义参 数 名含 义Navigation Static是否将物体标记为静态,需要烘焙的物体须将其勾选Agent Radius代理器半径Navigation Area导航区域,设置
36、当前选中的物体为可通过还是不可通过Agent Height代理器高度Max Slope代理器可以通过的最大坡度Step Height可通过的台阶高度Agent Radius代理器半径第32页9.3.2 小球寻路案例1. 案例效果案例效果本案例中使用多个本案例中使用多个Plane和和Cube对象搭建了一个简易的迷宫,迷宫分为两部分,对象搭建了一个简易的迷宫,迷宫分为两部分,相互之间没有连接。运行时可以通过鼠标点击场景,选择小球需要移动到的位相互之间没有连接。运行时可以通过鼠标点击场景,选择小球需要移动到的位置,小球能够在两个迷宫之间移动,并且能够与移动的障碍物产生碰撞置,小球能够在两个迷宫之间移
37、动,并且能够与移动的障碍物产生碰撞 第33页9.3.2 小球寻路案例2.制作流程制作流程( 1 ) 首 先 打 开) 首 先 打 开 U n i t y 集 成 开 发 环 境 , 新 建 一 个 工 程 并 重 命 名 为集 成 开 发 环 境 , 新 建 一 个 工 程 并 重 命 名 为“NavMeshAgent _Demo”,进入工程后保存当前场景并重命名为,进入工程后保存当前场景并重命名为“NavMeshAgent _Demo”,然后在,然后在Assets目录下新建两个文件夹分别命名为目录下新建两个文件夹分别命名为“Texture”和和“C#”,分别用来放置纹理图和脚本文件。,分别用
38、来放置纹理图和脚本文件。(2)搭建场景,本案例中使用了数个)搭建场景,本案例中使用了数个Cube和和Plane搭建了两个迷宫。搭建完搭建了两个迷宫。搭建完成后将导入的成后将导入的Texture文件夹中的纹理图添加到场景中,并在迷宫中放置一个文件夹中的纹理图添加到场景中,并在迷宫中放置一个Sphere作为需要寻路的角色,完成后效果如图作为需要寻路的角色,完成后效果如图9-56所示。所示。(3)接下来开始路网烘焙,首先点击菜单栏中)接下来开始路网烘焙,首先点击菜单栏中“Window”“Navigation”打打开窗口。将所有作为障碍物的开窗口。将所有作为障碍物的Cube全部选中,并在全部选中,并在
39、Navigation窗口中勾选窗口中勾选Navigation Static并将并将Navigation Area选择为选择为Not Walkable,然后选择两个,然后选择两个Plane对象执行同样的操作,只是把对象执行同样的操作,只是把Navigation Area选择为选择为Walkable。第34页9.3.2 小球寻路案例2.制作流程制作流程(4)完成后点击)完成后点击Navigation窗口下方的窗口下方的Bake按钮即可开始烘焙,完成后场景按钮即可开始烘焙,完成后场景如图如图9-57所示。接下来选中小球并为其添加代理器,点击菜单栏中所示。接下来选中小球并为其添加代理器,点击菜单栏中“
40、Component”“Navigation”“Nav Mesh Agent”即可,如图即可,如图9-58所示。所示。完成后即可在完成后即可在Inspector面板中看到代理器的设置面板,使用默认参数即可。面板中看到代理器的设置面板,使用默认参数即可。(5)由于两个迷宫彼此分离,所以需要使用分离网格链接。首先创建多个)由于两个迷宫彼此分离,所以需要使用分离网格链接。首先创建多个Cylinder,并在两个迷宫之间一一对应的摆放,如图,并在两个迷宫之间一一对应的摆放,如图9-59所示。然后在一侧的所示。然后在一侧的Cylinder上添加上添加Off Mesh Link组件。并在其设置面板中添加起始点
41、和结束点的组件。并在其设置面板中添加起始点和结束点的位置信息,最后将位置信息,最后将Cylinder上的渲染组件取消勾选即可,如图上的渲染组件取消勾选即可,如图9-60所示。所示。(6)完成后)完成后Cylinder对象将不在场景中被渲染,此时打开对象将不在场景中被渲染,此时打开Navigation窗口,窗口,场景的效果如图场景的效果如图9-61所示。场景中还有一个动态障碍物,为了能与代理器产生所示。场景中还有一个动态障碍物,为了能与代理器产生碰撞需要为其添加碰撞需要为其添加Nav Mesh Obstacle组件。组件。 第35页9.3.2 小球寻路案例2.制作流程制作流程(7)在)在C#文件
42、夹下右键文件夹下右键CreateC# Script创建一个创建一个C#脚本并重命名为脚本并重命名为“Demo”。双击脚本进入脚本。双击脚本进入脚本编辑器编辑代码,具体代码如下编辑器编辑代码,具体代码如下 。3 public class Demo : MonoBehaviour 4 private NavMeshAgent _nav; /声明代理器变量声明代理器变量5 void Start () 6 _nav = this.GetComponent(); /获取挂载该脚本的对象上的代理器组件获取挂载该脚本的对象上的代理器组件7 8 void Update () 9 if (Input.GetMo
43、useButtonDown(0) /判断鼠标是否被按下左键判断鼠标是否被按下左键10 Ray ray = 11 Camera.main.ScreenPointToRay(Input.mousePosition); /声明一条以鼠标位置为起点声明一条以鼠标位置为起点的射线的射线12 RaycastHit hit; /声明存储回馈信息的结构声明存储回馈信息的结构13 if (Physics.Raycast(ray, out hit) /向场景中发射射线,如果有回馈信息就继续执行向场景中发射射线,如果有回馈信息就继续执行14 _nav.SetDestination(hit.point); /将射线与将射线与3D物体的交点设置为代理器的目标点物体的交点设置为代理器的目标点15 第36页9.3.2 小球寻路案例2.制作流程制作流程(8)最后将脚本挂载到小球上即可,本案例中各个组件均使用的是默认参数,)最后将脚本挂载到小球上即可,本案例中各个组件均使用的是默认参数,实际开发时根据不同需求,可以对其中的参数进行微调。实际开发时根据不同需求,可以对其中的参数进行微调。 第37页
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。