0

我有一个脚本,它会在我创建的地形上延迟一段时间后生成敌人。它适用于创建的前三个敌人,但是当它第四次添加 navmeshagent 时,它会冻结整个游戏。

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class RandomSpawn : MonoBehaviour {
public List<GameObject> Spawnables;
public Terrain spawnLand;
public float spawnWait = 1f;
public int numPer = 1;
public bool enableSpawning =true;
float minx,maxx,minz,maxz,waiter = 1f;

// Use this for initialization
void Start () {
    minx = spawnLand.transform.position.x+2;
    maxx = spawnLand.terrainData.size.x + minx-4;
    minz = spawnLand.transform.position.z+2;
    maxz = spawnLand.terrainData.size.z + minz-4;
}
void Update(){
    waiter -= Time.deltaTime;
    if (waiter<=0) {
        waiter = spawnWait;
        if (enableSpawning) {
            Spawn ();
        }
    }
}
void Spawn()
{


    for (int i = 0; i < numPer; i++) {

        Vector3 loc = new Vector3 (Random.Range (minx, maxx), 0, Random.Range (minz, maxz));

        GameObject go = (GameObject)Instantiate (Spawnables[Random.Range (0,Spawnables.Count)],new Vector3(0,0,0),new Quaternion(0,0,0,0));

        NavMeshHit closestHit;
        if( NavMesh.SamplePosition( loc, out closestHit, 500, 1 ) ){
            go.transform.position = closestHit.position;
            go.AddComponent<NavMeshAgent>();
            //TODO
        }
        else{
            Debug.Log("...");
        }
    }
}
}

我使用服务员和 spawnWait 将其延迟。它似乎总是在创建第四个对象并将 navmeshagent 添加到它之后立即冻结和崩溃。我发现它可能是从场景的重拍中发现的。有什么办法可以阻止它冻结或重新烘烤。或者有没有更好的方法来使用 navmeshagents 在设定的位置生成敌人?

4

1 回答 1

0

对我来说,你的脚本工作得很好。只使用一个可生成的对象(可能是您有空对象或从数组边界开始)尝试它。一步一步调试它。尝试将 Spawn 方法放入 Coroutine 进程(docs.unity3d.com/Manual/Coroutines.html)。

于 2017-11-18T07:42:22.613 回答