我有一种方法在我的游戏,动态查找并实例预制件到我的场景这样
public void CreateAgent(string agentName)
{
var prefabs = Resources.FindObjectsOfTypeAll<Agent>();
var selectedPrefab = prefabs.Where(p => p.name == agentName).FirstOrDefault();
Instantiate(selectedPrefab.gameObject);
}
这有时可行,但似乎有时预制件的资源尚未加载,因此Resources.FindObjectsOfTypeAll()
不会返回我要加载的资源。我可以通过先致电Resources.LoadAll<Agent>("MyPrefabDirectory")
来解决此问题,但不确定在游戏过程中这样做是否会引起问题或使游戏速度变慢。似乎Unity也正在卸载先前使用的资源,因为我可以将预制A加载到我的场景中,然后加载一个新场景,并且当我尝试在新场景中加载预制A时,导致{ {1}}
所以我的问题是
Resources.FindObjectsOfTypeAll()
{前{1}}会找到我的预制?Resources.LoadAll()
吗?答案 0 :(得分:1)
Resources.FindObjectsOfType()
:
此函数可以返回已加载的任何类型的Unity对象。
为什么Unity会卸载以前加载的资源?节省内存。如果不使用它,它将收集垃圾。
考虑到您将只使用返回的对象之一,您可能应该重构为只对实际需要的单个对象调用Load
。