一:LineRenderer组件
LineRenderer线渲染器主要是用于在3D中渲染线段,在这里要注意LineRenderer渲染出的线段的两个端点是3D世界中的点,即它是属于世界坐标(World Space)中的。
二:Navigation导航系统
1:创建导航网格
选中需要创建导航网格的物体 在inspector面板中选为NavigationStatic
点击Window-Navigation 点击bake 导航网格初步创建完成(蓝色区域为导航网格能到达的地方 只有在选中navigation的时候 Scenes面板中才能看到)
Bake(烘焙)参数面板
Agent Radius:具有代表性的物体半径。物体半径越小,生成的网格面积越小,也越靠近静态物体边缘。
Agent Height:具有代表性的物体的高度。
Max Slope:最大可行进的斜坡高度。
Step Height:台阶高度。
Drop Height:允许的最大下落距离。
Jump Distance:允许的最大跳跃距离。
Advanced:高度参数调节。
Manual Voxel Size:选中代表手动输入像素值。
Voxel Size:像素值设置(默认为Agent Radius的1/3)
Min Region Area:网格面积小于该值的地方,将不生成导航网格。
Height Mesh:选中该选项,将会保存高度信息,同时也会消耗一些性能和存储空间。
Generate OffMeshLinks:
当导航过程中需要进行跳跃时 选中进行跳跃的地点 勾选上图中的Generate OffMeshLinks
再设置图一中的Drop Height和Jump Height两个参数即可
NavMeshAgent(导航组件)
Agent Size:Agent的尺寸控制。
Radius:物体的半径。
Height:物体的高度。
Base Offset:偏移值。
Steering:行为控制。
Speed:物体在NavMesh中行进的最大速度。
Angular Speed:物体在行进过程中转向时的角速度。
Acceleration:物体的行进加速度。
Stopping Distance:距离目标点小于此距离时停止行进。
Auto Braking:选中后自动制动。
Obstacle Avoidance: 躲避障碍参数。
Quality:质量。
None:无。
Low Quality:低质量。
Medium Quality:中等质量。
Good Quality:较好质量。
High Quality:高等质量。
Priority:路径优先级。
Path Finding: 路径寻找。
Auto Traverse Off Mesh Link:是否采用默认方式度过连接路径。
Auto Repath:在行进过程中,因某些原因中断的情况下,是否重新开始寻路。
Area Mask:遮罩区域。
NavMeshObstacle组件
是导航网格障碍物,在导航网格上的固定障碍物,可以作为烘焙过程中的一部分设置。但是,也可能在场景具有动态阻挡物,这将通过Agent移动来避开。这种动态障碍物,可以指定Navmesh Obstacle组件设置,可以被添加任何游戏物体上并随该对象移动。(当Carve该选项被勾选,Obsacle该物体会在NavMesh上制造一个空洞。)
Move Threshold :Unity会在Obstacle移动该距离下,将其处理为移动状态,使用该属性设置移动更新Carve空洞的频率。
Time To Stationary:Obstacle停止运动后,经过多少时间(秒)会被处理为静止状态。
Carve Only Stationary :启用时,Obstacle仅会在静止时被处理成空洞,详见官方文档(废话)。这里有几个小细节需要注意,禁用该选项时,空洞的重新计算是隔一帧计算一次,就是两帧计算一次。然后最好启用该选项,因为每次空洞的重新计算比较费时。官方文档中举了两个适用的场景:木桶、箱子之类会受力停止的启用选项,而像坦克缓慢移动的,则可以禁用该项。
OffMeshLink组件
分离网格链接组件,有时,场景中的静态几何体的导航网格不是全部相连在一起的,从而使代理不能从世界场景的这一部分移动到另外的部分。
它的意思就是蓝色是烘焙后MPC的网格路线,它都是由多边形组成的,如果在两个不相邻的物体之间进行移动,就需要这个组件(例如图中的标有箭头之间的两个物体)
Bi-Directional :如果启用,则该link是双向的,否则只能从Start到End。
NavMesh和其他组件共用注意:
Agent和Ridigbody,Ridigbody需要启用IK,否则会影响Agent的导航,因为在导航时Agent会自动控制角色移动,而不需要Ridigbody。
Agent和Animator,和上面的情况一样,Animator应该禁用Apply Root Motion,这样的使用非常简单粗暴。我们应该使用Animator来进行移动操作,而Agent只是预测作用,要使用这样的功能首先用代码禁用 NavMeshAgent.updatePosition和NavMeshAgent.updateRotation,并使用NavMeshAgent.nextPosition获取预测坐标。
Agent和Obstacle,不要混用它们,它会回避自己导致错误,如果想要同时使用,请确保只有一个组件在Active状态。
Obstacle和Ridigbody,简而言之就是可以使用,或者说本来就该这么用。