0

最初の NavMeshAgent しか作成できないという問題があります。

まず、NavMesh ベイク オブジェクト用にすべてのメッシュ レンダラーを選択しました。

ここに画像の説明を入力

ベイクを少し微調整して、適切な量のディテールが得られるようにしました。ベイク エージェント オプションでより大きな半径を使用すると、さまざまなオブジェクトの周囲の黒いギャップが大きくなります。

ここに画像の説明を入力

バックランプの両側に 2 つのスポナーを配置しました (白い球体が入っているもの)。これらは目に見えませんが、スクリプトでは、NavMeshObjects がこれらの場所に間隔を置いて配置され、目的地が他のゲームオブジェクトの 1 つに設定されます。

最初のものは問題なく動作しますが、スポーナー キュー内の他の 17 個の NavMeshObjects のいずれにも目的地を設定できません。

public class MinionSpawner : MonoBehaviour {
    public void spawn (GameObject minion, GameObject target_position_obj) {
        // Find the target position from the passed gameobject
        MinionTargetPosition target_position = target_position_obj.GetComponent<MinionTargetPosition>();
        if (!target_position) { throw new System.Exception("no valid target position given"); }
        // Instantiate the given minion at the spawner's origin point
        GameObject new_minion = Object.Instantiate(minion, transform.position, new Quaternion(0,0,0,0));
        new_minion.SetActive(true);
        // Mark the minion at it's target position, for lookup upon collision or elsewhere
        MinionAttributes minion_attrs = new_minion.GetComponentInChildren<MinionAttributes>(true);
        if (!minion_attrs) { throw new System.Exception("object passed as minion does not have MinionAttributes"); }
        minion_attrs.target_position = target_position;
        // Configure a NavMeshAgent to navigate the minion from origin to target position.
        NavMeshAgent nav_mesh_agent = minion_attrs.gameObject.GetComponent<NavMeshAgent>();
        if (!nav_mesh_agent) { throw new System.Exception("minion doesn't have a nav mesh agent"); };
        nav_mesh_agent.Warp(transform.position);
        // ================================================================
        // THIS LINE FAILS:
        nav_mesh_agent.destination = target_position.transform.position;
        // ================================================================
        // mark the minion's position as occupied in the turret's dictionary
        Turret turret = target_position.turret;
        turret.minion_slots[target_position] = true;
        // set the minion's parent to the minion spawner, for organization's sake.
        minion.transform.parent = transform;
    }
}

エラーが発生しています"SetDestination" can only be called on an active agent that has been placed on a NavMesh.が、これについて質問があることを知っています。Warpしかし、NavMesh をベイクする、NavMeshAgent の初期位置を で設定する、ポイントがメッシュ上にあることを確認するなど、提案されたすべてのことを実際に試しました。

4

1 に答える 1