检查禁用的navmesh代理(播放器)是否在导航网格中

时间:2017-07-31 12:54:01

标签: unity3d navmesh

我在播放器上使用navmesh / agent作为辅助自动验证功能,除非用户点击地板上的一个点走向,否则代理会一直处于禁用状态。然后,一旦到达目的地,代理将再次被禁用。

我需要一种方法来检查播放器当前是否在navmesh上,在可容忍的阈值内,而不启用导航功能。或者,如果有一种方法可以删除navmeshagent的播放器绑定“效果”而不禁用它,因为我也可以用它来解决我的问题。

我想在伪代码中,这就是我想要完成并禁用navmeshagent:

if (!agent.isOnNavMesh){ DisableClickSelection();}

我在考虑是否有可能比较玩家的Y变换和navmesh以获得高度差,并使用它来确定玩家是否在导航网上,但我不知道如何获得Y navmesh在特定X和Z点的变换。也许我可以使用光线投射?我不确定最好的方法。就像我说的那样,如果有一种方法可以消除播放器上代理的播放器绑定“效果”但是保持代理功能,我也可以使用它。

1 个答案:

答案 0 :(得分:4)

您应该可以使用NavMesh.SamplePosition()来完成此操作。该方法基本上在给定位置周围的球形半径中搜索navmesh上的最近点。您需要做的就是验证返回的位置是否垂直于玩家位置,并且在其上方/上方。

以下是关于如何在代码中应用此功能的想法:

if (!IsAgentOnNavMesh(agent.gameObject))
{
    DisableClickSelection();
}

因此,为了将它与你的例子一起使用,你要写:

email

希望这有帮助!如果您有任何问题,请告诉我。