unity3d Unity c# -无法在NavMesh上生成预制件

ldioqlga  于 2023-03-30  发布在  C#
关注(0)|答案(3)|浏览(358)

我正在尝试做一个僵尸波游戏和当前有一个预制为我的敌人.如果我有预制是在场景中,当我击中运行,他们是附加到NavMesh和跟踪球员完美.我想实现这一点,但与敌人正在从一个空的游戏对象,所以我可以得到波产卵.我已经实现了他们产卵,但他们有错误,

"SetDestination" can only be called on an active agent that has been placed on a NavMesh.
UnityEngine.AI.NavMeshAgent:SetDestination(Vector3)
EnemyAI:Update() (at Assets/Scripts/EnemyAI.cs:25)

这是我的EnemyAI脚本

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;

public class EnemyAI : MonoBehaviour
{
    public float lookRadius = 10f;

    Transform target;
    NavMeshAgent agent;
    public GameObject Player;
    
    void Start() 
    {
        agent = GetComponent<NavMeshAgent>();
    }
    // Update is called once per frame
    void Update()
    {
        float distance = Vector3.Distance(Player.transform.position, transform.position);
        
        if (distance <= lookRadius)
        {
            agent.SetDestination(Player.transform.position);
        }
    }
}

而我的生成脚本,它被附加到一个空的游戏对象,

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Spawning : MonoBehaviour
{
    public GameObject prefab;
    public int CountofCubes;
    private IEnumerator coroutine;
    public float spawnRate;
    
    IEnumerator Start()
    {
        while (true)
        {
            for (int i = 0; i < CountofCubes; i++)
            {
                    Instantiate(prefab, new Vector3(Random.Range(-25.0f, 25.0f), 0.5f, Random.Range(-25.0f, 25.0f)), Quaternion.identity);
            }
            yield return new WaitForSeconds(spawnRate);
        }
    }   
}

任何帮助将是伟大的谢谢!

0aydgbwb

0aydgbwb1#

我遇到了同样的问题,我没有解释,只有一个解决方案:
在开始功能中,我添加了:

navAgent = GetComponent<NavMeshAgent>();
navAgent.enabled = false;

// Invoke is used as a workaround for enabling NavMeshAgent on NavMeshSurface
Invoke("EnableNavMeshAgent", 0.025f);

EnableNavMeshAgent函数就是:

private void EnableNavMeshAgent ()
{
    navAgent.enabled = true;
}

如果我将调用延迟设置为小于0.025秒的值,错误会继续,但对于0.025,我只有两次,之后的行为是我想要的。

swvgeqrz

swvgeqrz2#

我有点记得前阵子遇到过类似的问题,问题是我忘了在Window > AI > Navigation中烘焙NavMesh。以防万一。

ql3eal8s

ql3eal8s3#

可能发生这种情况的一些原因:
1.代理与任何导航网格都不在同一水平线上,即,可能会太高或太低。您希望它“接近NavMesh曲面”。在地板上使用光线投射来定位代理或添加刚体并从地板上方将其放下。完成此操作后,您可能需要禁用和启用代理。
1.自己移动变换,而不是使用Warp函数。有property,您可以检查模拟和实际位置是否同步。
1.导航网格损坏,因此可能需要重新烘焙。
它本质上是试图告诉你你的代理不在网格上,所以它找不到路径。

相关问题