私のスクリプトでは、変換位置(emptyTransforms
配列)に障害物(プリファブはprefabObstacles
の配列に格納されています)をインスタンス化します。このスクリプトは、世界の一部であるgameobject
に添付されています。このセグメントは動的にインスタンス化され、破棄されます。スクリプトが資産を破壊するのはなぜですか? Unity
public class ObstaclePlacer : MonoBehaviour
{
public int obstaclesAmmount;
public GameObject[] prefabObstacles;
public Transform[] emptyTransforms;
public GameObject[] obstacles;
void Start()
{
GenerateObstacles();
}
void GenerateObstacles()
{
for(int i = 0; i < Random.Range(0,obstaclesAmmount); i++)
{
GameObject objToSpawn = prefabObstacles[Random.Range(0, prefabObstacles.Length)];
obstacles[i] = Instantiate(objToSpawn, (emptyTransforms[Random.Range(0, emptyTransforms.Length)].position+new Vector3(0.0f, 1.0f)), Quaternion.identity) as GameObject;
}
}
void OnDestroy()
{
foreach(GameObject item in obstacles)
{
Destroy(item);
}
}
}
このバグが発生している:
を資産の破棄は、データの損失を回避するために許可されていません。
UnityEngine.ObjectDestroyImmediate (theObject, true);
あなたが本当に資産の使用を削除する場合:(オブジェクト)を破壊
ObstaclePlacer:(資産/スクリプト/ ObstaclePlacer.csで:37)OnDestroy()
これはのみ動作します障害物配列のサイズが固定されている場合
どうすれば修正できますか?
詳細が必要な場合は、私に尋ねてください。手伝ってくれてありがとう!
あなたは、オブジェクトが破棄されたときに明らかに呼び出される 'void OnDestroy()'を持っています。 'void OnDestroy()'のコードでは、他のすべての項目を破棄するように指示しています。もちろん、そうしています。 – Fattie
@Joe Blowしかし、なぜシーン内のゲームオブジェクトの代わりに資産を破壊しているのですか? Alesoはこれをやっていないし、このエラーが発生します。 –
あなたは 'public GameObject [] obstacles'で何を割り当てていますか?これにはプロジェクト資産フォルダのプレハブが含まれていますか? –