4:Navigation 智能导航地图烘焙

本教程学习均来自U3D中文课堂麦扣老师
1:
先创建一个3D项目 , 命名为3D RPG , 然后在 里下载 PR
下载完后创建 , 
在和中选择渲染管线
2:Build Level
在中添加游戏素材
导入素材
将整个项目升级到URP
如果需要可以更换天空盒子
可以调整阴影
可以设置的属性

4:Navigation 智能导航地图烘焙

文章插图
3: 发挥创意构建场景
下载并导入第二个
点开
第一个图标与相似 , 调整地面高低 , 第二个是用来柔化的 , 第三个可以将不同的物体刷上不同的颜色 , 区分不同地域 , 第四个可以快速将预制体刷到场景中 , 
下载
创建Plane
将渲染格子变为三角形
创建Plane的 , 选择为的Color URP , 这样可以用在不同区域刷上不同的颜色
4: 智能导航地图烘焙
制作好地图如下
先将标记为  , 要使Tree不能让人物移动过去 , 选择只将这个物体标记为 而不是包括子物体 。
4:Navigation 智能导航地图烘焙

文章插图
使用 智能导航地图烘焙 , 将Tree和Grass标记为 ,设置Not ,将Grass设置为.
为人物添加Agent组件 , 调整大小 , 然后在菜单中调整数值再次进行烘焙
可以将一些可以移动的物体但不和人物发生穿模添加组件 , 
5: 鼠标控制人物移动
创建一个脚本名为,挂在相同名称的空物体上 , 
在脚本中加上命名空间using . , 然后创建类 , 继承于的引用 。
在类中创建类的对象 , 
由于类不是继承的 , 他需要被系统序列化才能显示出来 , 所以需要在前面加上一个描述:[.] 。
如下:
using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEngine.Events;[System.Serializable]public class EventVector3 : UnityEvent { } public class MouseManager : MonoBehaviour{public EventVector3 onMouseClicked;}
这样就能添加人物事件了
接下来写一个方法来获得鼠标点击屏幕上的数值
查找API手册
首先创建一个类型的变量来保存射线碰撞到的物体的相关信息 , 然后创建方法来设置指针的贴图和返回鼠标左键点击返回值 , 代码如下:
using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEngine.Events;[System.Serializable]public class EventVector3 : UnityEvent { } //创建类EventVector3 , 继承于UnityEvent的Vector3引用 。public class MouseManager : MonoBehaviour{RaycastHit hitInfo; //保存射线碰撞到的物体的相关信息public EventVector3 onMouseClicked;private void Update(){SetCursorTexture();//设置指针的贴图MouseControl();//返回鼠标左键点击返回值}void SetCursorTexture() //设置指针的贴图{Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);if(Physics.Raycast(ray,out hitInfo)){//切换鼠标贴图}}void MouseControl()//返回鼠标左键点击返回值{if(Input.GetMouseButtonDown(0)&&hitInfo.collider != null){if(hitInfo.collider.gameObject.CompareTag("Ground")){onMouseClicked?.Invoke(hitInfo.point); //当前onMouseClicked事件如果不为空 , 将点击到地面上的坐标传回给这个事件 , 将}}}}
【4:Navigation 智能导航地图烘焙】现在就可以点击移动角色了 。