导入场景文件,导出NavMesh文件 把上面导出的.obj文件放到Bin/Meshes下,然后选择目标obj文件,执行Build,即可完成NavMesh的构建,如下图所示: [6.png] 右侧支持调整参数 ,调整完成后点击build可以再次生成,确认OK后点击save即可生成服务器可以使用的navmesh.bin文件。 五、 服务器加载NavMesh文件 1. 加载NavMesh文件 加载NavMesh文件,需要用到Detour中的dtNavMesh类,类提供了Init接口,但是使用RecastDemo导出的bin文件,不能直接用使用Init接口打开,因为这里用到了自定义的头部结构 也就是说Unity中的(20, 1, 30),对应NavMesh中应该是(-20, 1, 30)。
而Unity的NavMesh是用的拐角点算法,随便找一个场景烘焙一下便可得知,例如: ? 对于场景不变的静态地图来说,Unity最初的NavMesh已经能够满足需求,但如果地图随机生成或障碍物的位置随时变化,此时静态NavMesh一下子就捉襟见肘了。 92 public void Bake() 93 { 94 // Construct and add navmesh 95 m_NavMesh = new NavMeshData(); 96 m_Instance = NavMesh.AddNavMeshData(m_NavMesh); 97 if (m_Tracked 一个区域内的NavMesh动态烘焙完成后,很多AI可能需要在NavMesh中取随机点进行导航的目标点的设置或巡逻等,可以写一个扩展方法得到NavMesh的顶点数据,取任何一个三角内的点即可: 1
Static中: 然后打开Navigation窗口进行烘焙,在Window/AI菜单中: 点击Bake烘焙,在Scene场景窗口中进行预览,其中蓝色的区域即是寻路时可以行走的区域: 为示例中的机器人添加NavMesh
Areas.PNG NavMeshObstacle: 在场景中添加动态的障碍物 将场景中新产生的物体设置为寻路中的障碍,默认网格不会重新烘焙,勾选Carve之后会make a cut-out in the navmesh A NavMeshObstacle is cylindrical in shape and can move around the surface of the NavMesh with a specified If carving is enabled, the obstacle will create a temporary "hole" in the NavMesh.
NavMesh:Agent可以在NavMesh在行走。 Off-Mesh Link:相当于传送门。 NavMesh Obstacle:障碍物。 创建NavMesh 标记为Navigation Static 所有用于成为NavMesh的网格都必须被指定为Navigation Static。 到这里NavMesh就设置完毕了。 NavMesh Agent设置和脚本编写 ? 很简单,Agent Size设置可以在Scene面板中实时看到。 Speed:Agent所能达到的最大速度。
(三)之人物上下斜坡设置 Unity手游之路<八>自动寻路Navmesh之入门 Unity手游之路<十>自动寻路Navmesh之跳跃,攀爬,斜坡 NavMesh Agent 一、Navigation面板 [这里写图片描述] 烘焙完成后,您将在与NavMesh所属场景同名的文件夹中找到一个NavMesh资产文件。 ,里面有一个NavMesh的资源文件,是属于这个场景的NavMesh。 NavMesh烘焙的高级设置 最小区域面积 [这里写图片描述] [这里写图片描述] Min Region Area 允许你剔除掉小的非连接NavMesh区域,当NavMesh区域小于指定值时将被剔除。 [这里写图片描述] 导航时,NavMesh代理被约束在NavMesh的表面。由于NavMesh是可步行空间的近似,所以在构建NavMesh时,一些特性会被平均化。
项目的核心技术配置需重点说明,因为后续的异常排查与优化均围绕这些配置展开:在导航网格(NavMesh)方面,采用“分层烘焙”策略,将场景按地形类型分为“地面层”“平台层”“斜坡层”,每层设置差异化的导航成本 第一类是斜坡地形中的“打滑停滞”异常,在坡度为30°的斜坡场景中(该坡度在NavMesh支持的最大坡度45°范围内,理论上应正常移动),当通过代码给NavMeshAgent设置目标点(位于斜坡顶端,距离角色 进一步观察角色Transform位置变化,发现每帧仅向上移动0.01m,随后立即被物理引擎拉回原位置,形成“移动-回退”的循环;打开NavMesh Debugger(导航网格调试工具),可见导航路径仍保持连续 最后验证NavMesh烘焙参数:重新烘焙NavMesh,将“斜坡角度限制”从45°改为35°(当前场景斜坡为30°,仍在允许范围内),路径死循环问题无任何变化;启用“烘焙时包含物理碰撞体”选项,确保导航网格与碰撞体完全重合 ,异常概率仍为38%,排除了NavMesh烘焙不精准的可能性。
PlayArea物体上瞬移组件介绍 BlinkTransitionSpeed:瞬移时闪屏的效果时长 DistanceBlinkDelay:闪屏的延时 TargetListPolicy:相应瞬移的机制 使用NavMesh 2️⃣ NavMesh瞬移 该规则和上面1规则可同时进行。即使用自动导航传送。 NavMeshLimitDistance:NavMesh内部区域(内部留白不能导航的区域)向内0.5m也能传送。 (因为当为0时,代表着系统会忽略NavMesh的因素,不使用该规则) a、Windows——AI——Navigation——Object:设置哪些物体可进行自动寻路,那些物体是障碍物。
动态烘焙: 官方最新的 https://github.com/luoyikun/NavMeshComponents 1.可以实现烘焙信息跟随预制体
越大则返回的检测范围越大,一般用于想检测的点不在导航网格中时返回一个正确的网格中的坐标) maxDistance:在距 sourcePosition 的此距离内检测 areaMask:指定在找到最近的点时允许的NavMesh 描述: 根据指定范围内的 NavMesh 查找最近的点。 通过将输入点沿垂直轴投影到附近的 NavMesh 实例上,可以找到最近的点。在创建时已为每个实例选择了此垂直轴。 如果此步骤未在指定距离内找到投影点,则将采样扩展到周围的 NavMesh 位置。 根据到查询点的距离查找最近的点。此功能不考虑障碍物。 如果您尝试在 NavMesh 上查找随机点,则应使用推荐的半径并多次执行查找,而不是使用非常大的半径。 (go.transform.position, out hit, 1.0f, NavMesh.AllAreas)) { Debug.Log("当前鼠标点击的物体在导航网格中
文件下载:地址 本章用到的知识 协程 NavMesh知识点 本章目标 资源文件已为我们制作好了FPSController第一人称目标角色,即玩家角色,我们可以通过键盘控制人物移动,观察Robot互动效果 属性,Navigation Area选择Walkable c、选择墙壁等障碍物,同样选择Navigation Static,但是下方的Navigation Area选择Not Walkable d、根据NavMesh
在UE对应ModifyVolume生效的机制:判断体素化后的小方块(在Recast中称为span)是否在Convex Volume中 NAVMESH_API dtStatus dtMarkCylinderArea pos, const float radius, const float height, const unsigned char areaId); //@UE4 BEGIN: more shapes NAVMESH_API const float cs, const float ch, const float* pos, const float* extent, const unsigned char areaId); NAVMESH_API const float* verts, const int nverts, const float hmin, const float hmax, const unsigned char areaId); NAVMESH_API float radius, const float height, const unsigned char areaId, const unsigned char filterAreaId); NAVMESH_API
Speed:传送时闪屏的效果时间 Distance Blink Delay:闪屏的延时时间 Target List Policy:相应瞬移的策略设置 Nav Mesh Limit Distance:使用NavMesh Nav Mesh Limit Distance 删掉Target List Policy,这两个限制可同时使用 根据自动寻路系统,绕过障碍物原理,实现瞬移区域的限制,该实现原理与自动寻路机制完全一致 NavMesh 知识点回顾 Nav Mesh Limit Distance:该数值为0时,VRTK将不考虑NavMesh对传送的影响,即该限制失效;数值为0.5时,NavMesh未覆盖区域将减小0.5m,当该值足够大或者超大时
、玩家拾取血包增加血量 2、玩家可用激光对NPC造成伤害 一、导入资源文件 文件下载:地址 1、导入Package 2、运行_Scenes里面的BattleStar_GameScene场景,观察 二、NavMesh 我们先将FPSController设置为NavMesh Agent,自动寻路到该位置看看实际效果。 ); agent.destination = GameObject.Find("GameOverPosition").transform.position; } } 2、重设NavMesh 我们重新设置下NavMesh寻路区域: Navigation-Object-Mesh Renderer将Door设置成Walkable;Floor勾选Navigation Static-Walkable Bake 运行游戏,我们发现FPSController正确寻路到目标点,现在我们完成了系统的NavMesh寻路系统设置,接下来我们增加人物捡到血包加血功能 三、实现血包加血功能 观察游戏项目,我们发现控制人物血量的属性
/forum.cocos.org/t/topic/134727 下载链接: https://store.cocos.com/app/detail/3657 作者:iwae——孙二喵 介绍:Easy NavMesh 同时 Easy NavMesh 还提供了预烘焙 NavMesh 网格信息保存为了 JSON 格式,来确保加载和运行效率。 体验链接: https://iwae.github.io/navmesh/ 下载链接: https://store.cocos.com/app/detail/3641 作者:麒麟子 介绍:KylinsEasyController
我想这样应该能解决这个问题; 解决边界点的判定 if (Input.GetMouseButtonDown(1)) { NavMeshHit hit; NavMesh.Raycast(transform.position
Easy NavMesh 作者:孙二喵 Easy NavMesh 是一个轻量级的网格导航库,在 Cocos Creator 3.x 中实现了完善的 3D 导航网格自动寻路功能。 插件采用了 A*+ 漏斗算法,整个库只有 40KB 不到,可以满足 H5/小游戏平台对包体大小和性能消耗的需求;同时预烘焙 NavMesh 网格信息保存为了 Json 格式,来确保加载和运行效率。 在这期间,作者积累和沉淀了大量 v3.x 的 3D 游戏开发经验与模块组件,均运用到了项目中,包括玩家角色控制器、Lod 优化、NavMesh 寻路、3D 文字标签、3D 物理运用与优化、Marionette
MissingComponentException:组件丢失异常 “SetDestination” can only be called on an active agent that has been placed on a NavMesh
Vector3 point = hit.point; //如果检测到碰撞,获取碰撞点 agent.SetDestination(point); //将添加了NavMesh
---- Navigation:寻路窗口 Navigation是Unity提供的寻路功能,而点击菜单navigation也可以帮助我们来烘焙地形,增加Navmesh。 然后渲染NavMesh。如下图里的蓝色区域就是我们渲染后的navmesh地板。 ? 同样Navmesh也提供了清除的功能,点击上图中的Clear即可,这里不再演示了。