只有一個默認相機和一個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);
}
}
}
你創建和每一幀摧毀了太多的對象,沒有遊戲將永遠需要一個 – Lestat
@Lestat我的遊戲本身不產生許多對象每一幀....此代碼是精心策劃,以重現問題一個簡單的方式...我會很感激,如果有人回答爲什麼內存永遠不會釋放(並保持永遠增長)在這樣一個簡單的代碼...謝謝。 –
您好,問題是'gb.AddComponent()'如在我的答案提及。您可以評論該代碼行以驗證該聲明。你需要在我的答案中鏈接兩個對象池。 –
Programmer