17

問題の説明

NavMesh エージェントが無効なパスを計算するのに苦労していますが、明らかに理由はありません。この問題は、最初の有効なパスで既に移動しているときに時々発生します。

エージェントは自分の道を見つけることができません

上の画像では、宛先は左上隅のコーンです。(NavMeshAgent の方向矢印は気にしないでください。エージェントを手で動かして「ロックを解除」しようとしました)

  • インスタンス化されたら、エージェントに NavMesh 上の特定の宛先ポイントへのパスを計算するように依頼します( NavMesh.SamplePositionを使用して、宛先ポイントが NavMesh 上にあることを確認します)。すべて正常に動作します。エージェントは自分の道を見つけ、ターゲットに向かって動き始めます
  • しかし、旅の最中に突然、最初のステップからNavMeshが変更されていない間に、彼は自分自身を失います。私は彼に何も尋ねていません。新しいパスの新しい計算もしていません。

テスト済みのソリューション

  1. 目的地が NavMesh 上にあることを確認しました

    public Vector3 GetCharacterPositionOnNavMesh( Vector3 position )
    {
        NavMeshHit hit;
        bool positionFound = NavMesh.SamplePosition( position, out hit, 500, NavMesh.AllAreas );
    
        if ( !positionFound )
            Debug.LogWarning( "No valid position found !" );
    
        return positionFound ? hit.position : position;
    }
    
  2. エージェントのエリア マスクをチェックして、NavMesh のさまざまなエリアにもかかわらず、エージェントが目的地へのパスを見つけられることを確認しました

  3. エージェントのパスが無効かどうか、ほぼすべてのフレームをチェックします。CalculatePathその場合、またはを使用して新しいものを計算しSetDestinationます。うまくいくこともあれば、うまくいかないこともあります。

    protected virtual void Update()
    {
        if ( !Running || !agent.enabled || !agent.isOnNavMesh )
            return;
    
        if ( !agent.pathPending && agent.path.status == NavMeshPathStatus.PathInvalid && Time.frameCount % 2 == 0 )
        {
            NavMeshPath path = new NavMeshPath();
            agent.CalculatePath( CharactersManager.Instance.GetCharacterPositionOnNavMesh( finalDestination ), path );
            agent.SetPath( path );
        }
    }
    
  4. シーン全体ですべての NavMeshObstacle を無効にします (私のエージェントには NavMeshObstacle もその子にもありません)

  5. 初期位置と最終目的地の間にさらにステップを追加する

  6. エージェントのAutoRepathプロパティを無効にしました

  7. パスを計算し、すべてのコーナーを保存し、これと同様の方法を使用して一度に 1 つのコーナーでエージェントの目的地を設定します

注 : 別のエージェントが最初のエージェントをプッシュすると、後者が起動してパスを見つけたように見えます。

4

3 に答える 3

0

私は最近、宛先が NavMesh の端に近すぎると、NavMesh エージェントが動かなくなり、通常は回転し始めるという非常によく似た問題を抱えていました。私にとってそれを修正したのは、エージェントの半径の半分だけエッジから遠ざけることでした。これにより、エージェントが目的地に到達したときに、エージェントはその上に立っています。

これで問題が解決しない場合はwarping、エージェントを試すことができます。

https://forum.unity.com/threads/agents-get-stuck-on-navmeshlink.503527/ https://forum.unity.com/threads/agent-getting-stuck-in-another-agent-when- walk-in-corners-what-is-the-right-solution.501824/ https://forum.unity.com/threads/strange-navmeshsurface-behavior.501453/ https://forum.unity.com/threads/ failed-to-create-agent-because-it-is-not-close-enough-to-the-navmesh.500553/ https://forum.unity.com/threads/navmesh-link-does-not-connect-適切に実行中.473223/

于 2017-11-20T07:51:33.583 に答える