嗨,当玩家接近敌人时,我正试图让敌人向玩家移动。这是我的剧本,
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上的活动代理上调用。
答案 0 :(得分:1)
&#34; SetDestination&#34;只能在已放置在NavMesh上的活动代理上调用。
那是因为你需要烘焙NavMesh。它基本上定义了哪些网格是可步行的,哪些不是,所以你的代理知道他们可以走的是什么。
如何烘焙NavMesh
在检查器中选择并将所有可行走表面标记为导航静态(或简单地勾选静态)(使用静态复选框旁边的下拉列表。)
在对象选项卡中,将当前选定的网格标记为可步行或不可步行。
完成后,在导航窗口下的“烘焙”选项卡中,单击“烘焙”。
您的最终结果应该是这样的:
蓝色区域代表&#34; walkable&#34;区域。只有当您打开导航窗口并选中了场景窗口右下角的Show NavMesh复选框时,才会显示此蓝色轮廓。
确保您的座席在启动期间始终位于蓝色区域内。如果您将目标设置为没有navmesh的区域,或者由于任何原因它失败,SetDestination将返回false。