【发布时间】:2017-06-22 16:54:52
【问题描述】:
只有一个默认相机和一个游戏对象。
为什么销毁的游戏对象仍然在内存中?我尝试手动调用 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 我的游戏本身并不会每帧创建那么多对象....这段代码经过精心设计,可以轻松重现问题...如果有人回答为什么内存永远不会,我将不胜感激以如此简单的代码发布(并永远保持增长)......谢谢。
-
嗨,问题是我的回答中提到的
gb.AddComponent<SpriteRenderer>()。您可以注释该行代码以验证该语句。您需要对象池两个示例在我的答案中链接。