私が作成した地形に時間の遅れた敵を生成するスクリプトがあります。それは作成された最初の3つの敵のために動作しますが、4回目にnavmeshagentを追加するとゲーム全体がフリーズします。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("...");
}
}
}
}
ウェイターとスポーンウォットを使用して時間遅れを入れました。 4番目のオブジェクトを作成してnavmeshagentを追加した直後は、常にフリーズしてクラッシュするようです。私はそれがおそらくシーンの再構築からであることを知りました。凍結や再凍結からそれを停止する方法はありますか?あるいは、navmeshagentsを使って設定された場所に敵を召喚するには良い方法がありますか?
あなたのスクリプトはうまくいきます。 1つの生成可能なオブジェクトで試してみてください(オブジェクトがnullであるか、配列境界から出ている可能性があります)。ステップごとにデバッグしてください。 CorawnineプロセスにSpawnメソッドを追加してみてください(https://docs.unity3d.com/Manual/Coroutines.html)。 – maximelian1986
複数のオブジェクトに対して動作し、フリーズする前にそれらを4回生成します。他のスクリプトがフリーズして報告するかどうかを確認します。 @ maximelian1986 – Mindstormer
@ maximelian1986あなたは答えで上記のことを投稿してください。あなたは頭の上でそれを打つ。どうもありがとうございます :)。私はあなたにそれのポイントを与えたい。 – Mindstormer