【问题标题】:NavAgent tangent to the terrainNavAgent 与地形相切
【发布时间】:2017-12-21 18:51:56
【问题描述】:

我在地板上有一个 NavMesh(有一些小山和一些东西),我的“士兵站”(我正在复制桌面战争游戏)有 NavMeshAgent。一切正常且顺利,但问题是当代理上坡时它保持垂直,我想这对一个人来说是可以的,但是对于坦克来说没有任何意义.. 一半的感谢漂浮在空中,另一半在山里面

这是一个例子:

有什么方法可以确保游戏对象与 NavMesh 相切?垂直轴应该遵循代理中心点的NavMesh法线或其他东西。老实说,我想我不是第一个注意到的人,但我无法找到解决方案

【问题讨论】:

  • 我开始认为 navmesh.sampleposition 只是没有在 NavMeshHit 结构中添加正常数据,或者它不能基于导航网格的数据定义。添加普通数据似乎也与函数的声明相悖。

标签: unity3d navmesh


【解决方案1】:

这似乎是一种 hack 方式,但您可以将机器人的光线投射到导航网格上,然后您可以使用光线命中的法线来旋转您的坦克/机器人。

光线投射到导航网格:https://answers.unity.com/questions/325929/raycasting-on-navmesh.html

然后使用它根据击球面的法线方向旋转你的机器人:

tranform.rotation = Quaternion.FromToRotation(Vector3.up, rayhit.normal);

这是一个不错的起点;此外,您可以开始添加更多光线投射以获得更多附加/准确的旋转。例如,如果您的机器人上有 4 个轮胎,则每条射线都会从这些点发射。

【讨论】:

  • 你会从哪里到哪里进行光线投射?从机器人的中心到..在哪里?类似于地形的最近点?顺便说一句..你如何指定你只想针对导航网格进行光线投射在链接中没有找到它...... :(
  • 因为我不知道从哪里进行光线投射,所以我尝试了 NavMesh.SamplePosition。我在机器人和网格之间有一个接触点,但由于距离为零(他们接触),所以命中。正常是 (0,0,0) .. 还有其他解决方案吗?
  • 是的,对不起,我承认,我在这里过激了。我一直在用法线做更多的测试,但我似乎也无法让它工作。我可以获得除正常之外的所有属性。但是,我想不出任何需要将光线投射到导航网格而不是网格上的实际对撞机的实质性情况。所以也许你可以尝试一个普通的 Physics.raycast。
  • 如果直接将光线投射到对撞机上适合您的情况,请告诉我,我会更新我的答案。
  • 这不是我想做的,因为碰撞器比网格大,由于某些游戏机制需要它.. 我可以在两个不同的层中添加两个不同的碰撞器但是..一切都太老套了..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-26
  • 2011-03-01
  • 1970-01-01
  • 2011-01-03
  • 1970-01-01
相关资源
最近更新 更多