【问题标题】:NavMeshAgent stuck (outside) the NavMeshNavMeshAgent 卡在(外部)NavMesh
【发布时间】:2016-07-04 21:47:03
【问题描述】:

对于敌人,我每隔 x 秒在导航网格上设置一个随机位置,以便敌人随机走动。这是我的脚本:

随机点(来自统一文档)

bool RandomPoint (Vector3 center, float range, out Vector3 result)
{
    for (int i = 0; i < 30; i++) {
        Vector3 randomPoint = center + Random.insideUnitSphere * range;
        NavMeshHit hit;
        if (NavMesh.SamplePosition (randomPoint, out hit, 1.0f, NavMesh.AllAreas)) {
            result = hit.position;
            return true;
        }
    }
    result = Vector3.zero;
    return false;
}

我的随机移动脚本:

IEnumerator Walking ()
{
    if (!isFollowingPlayer && isServer) {
        Debug.LogError ("-- Start Walking --");
        agent.speed = 2;
        Vector3 randomDirection;
        bool blocked = RandomPoint (agent.transform.position, walkRadius, out randomDirection);
        NavMeshHit hit;
        blocked = NavMesh.Raycast (enemy.transform.position, randomDirection, out hit, NavMesh.AllAreas);
        if (!blocked) {
            geileMethodeZumZeichnen (agent);
            target = hit.position;
            agent.SetDestination (hit.position);
            geileMethodeZumZeichnen (agent);
            Debug.LogWarning ("Go to " + hit.position);
        } 
        if (blocked) {
            Debug.LogWarning ("-- BLOCKED --");
            yield return new WaitForEndOfFrame ();
        } else {
            Debug.LogWarning ("-- WAIT --");
            yield return new WaitForSeconds (5f);
        }
        StartCoroutine ("Walking");
    }
}

随机行走通常有效。然而,当导航网格代理接近导航网格的边界时,他似乎“突围”,然后被卡在他的位置上。他只是在导航网之外“四处颤抖”。 (图片上的红线:路径)

看起来他们试图到达他们的位置,但无法再次进入导航网格。我不希望他们首先离开:)

【问题讨论】:

  • 您好,首先,我不知道“geileMethodeZumZeichnen (agent)”函数的作用。无论如何,我看到的唯一问题是你在协程内部调用 walk 协程(我相信协程在主协程结束时停止)。最后一件事,我猜您正在绘制调试线以查看代理目标。如果没有,你应该这样做。谢谢。
  • 对不起,是的,这正是该方法的作用。我的变量“阻塞”的意思是-“路被阻塞”,所以我再次调用它来计算另一个点
  • 这可能是一个愚蠢的问题。但是你为什么不叫 walk in Update() 呢?它可能不太理想并浪费处理器周期。但是我认为当 yiu 在协程中调用协程时,第二个协程会在第一个协程结束时停止。 (除非你在第一个有无限循环)。我不知道你是否明白这一点... :( 抱歉

标签: c# unity3d navmesh


【解决方案1】:

好的,最后这很容易: 我没有正确设置物理。由于物理原因,敌人真的“感觉”到了边缘并被困在那里。现在像魅力一样工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多