デフォルトのカメラと1つのGameObjectしかありません。このコードがメモリリークを引き起こすのはなぜですか?
破壊されたゲームオブジェクトがまだメモリ内にあるのはなぜですか? GCを手動で呼び出そうとしましたが、Resources.UnloadUnusedAssetsと他のハッキングが成功せずにいます。 私のゲームでは、GameObjectsをオンザフライで作成する必要があります...もちろん、ObjectPoolingを行うこともできますが、プレイヤーは数時間プレイしていて、数多くのスプライトがあるので、これはまだ問題になると思います。
public class Game : MonoBehaviour
{
private List<GameObject> objects;
// Use this for initialization
void Start()
{
this.objects = new List<GameObject>();
}
// Update is called once per frame
void Update()
{
foreach (var item in this.objects)
{
Destroy(item);
}
this.objects = new List<GameObject>();
for (var i = 0; i <= 1000; i++)
{
GameObject gb = new GameObject();
gb.name = i.ToString();
SpriteRenderer renderer = gb.AddComponent<SpriteRenderer>();
renderer.sprite = Resources.Load("Sprites/grass", typeof(Sprite)) as Sprite;
gb.transform.position = new Vector3(i, transform.position.y, transform.position.z);
this.objects.Add(gb);
}
}
}
あなたは1フレームごとにたくさんのオブジェクトを作成して破壊していますが、ゲームにそれを必要とするものはありません。 – Lestat
@Lestat自分のゲーム自体はフレームごとに多くのオブジェクトを作成しません....簡単なやり方...誰かがメモリが決して解放されない(と永遠に成長し続ける)理由が、このような簡単なコードで答えると感謝します...ありがとう。 –
こんにちは、問題は 'gb.AddComponent()'私の答えで述べたようです。その行をコメントして、そのステートメントを確認することができます。あなたは2つの例が私の答えでリンクされているオブジェクトのプールが必要です。 –
Programmer