EnemyMovement C#NavMeshAgent错误

时间:2018-02-18 20:21:38

标签: unity3d

嗨,当玩家接近敌人时,我正试图让敌人向玩家移动。这是我的剧本,

public float lookRadius = 10f;

    Transform target;
    NavMeshAgent agent;

    // Use this for initialization
    void Start () {
        target = PlayerManager.instance.player.transform;
        agent = GetComponent<NavMeshAgent>();
    }

    // Update is called once per frame
    void Update () {
        float distance = Vector3.Distance(target.position, transform.position);

        if (distance <= lookRadius)
        {
            agent.SetDestination(target.position);
        }
    }

    private void OnDrawGizmosSelected()
    {
        Gizmos.color = Color.red;
        Gizmos.DrawWireSphere(transform.position, lookRadius);
    }
}

我有一个NavMeshAgent,但它一直给我一个错误说&#34; SetDestination&#34;只能在已放置在NavMesh上的活动代理上调用。

1 个答案:

答案 0 :(得分:1)

  

&#34; SetDestination&#34;只能在已放置在NavMesh上的活动代理上调用。

那是因为你需要烘焙NavMesh。它基本上定义了哪些网格是可步行的,哪些不是,所以你的代理知道他们可以走的是什么。

如何烘焙NavMesh

  1. 打开导航窗口。 [窗口&gt;导航]
  2. 在检查器中选择并将所有可行走表面标记为导航静态(或简单地勾选静态)(使用静态复选框旁边的下拉列表。)

    • 将对象标记为静态是一种表示在游戏过程中对象根本不会移动的方法。
  3. 在对象选项卡中,将当前选定的网格标记为可步行或不可步行。

  4. 完成后,在导航窗口下的“烘焙”选项卡中,单击“烘焙”。

    • 请注意,烘焙过程中只会考虑带网格的物体
  5. 您的最终结果应该是这样的:

  6. NavMesh baking

    蓝色区域代表&#34; walkable&#34;区域。只有当您打开导航窗口并选中了场景窗口右下角的Show NavMesh复选框时,才会显示此蓝色轮廓。

    确保您的座席在启动期间始终位于蓝色区域内。如果您将目标设置为没有navmesh的区域,或者由于任何原因它失败,SetDestination将返回false。