前几天一直在想unity中DontDestoryOnLoad里面的物体是不是可以拿出来,因为有些时候复用的场景如果一整个流程下来只需要生成一个就可以了(多场景使用)。然后终于让我给找到了,DontDestoryOnLoad里面的物体确实是可以获取到的。
废话不多说,直接上代码:
private GameObject[] getDontDestroyOnLoadGameObjects()
{
var allGameObjects = new List<GameObject>();
allGameObjects.AddRange(FindObjectsOfType<GameObject>());
//移除所有场景包含的对象
for (var i = 0; i < SceneManager.sceneCount; i++)
{
var scene = SceneManager.GetSceneAt(i);
var objs = scene.GetRootGameObjects();
for (var j = 0; j < objs.Length; j++)
{
allGameObjects.Remove(objs[j]);
}
}
//移除父级不为null的对象
int k = allGameObjects.Count;
while (--k >= 0)
{
if (allGameObjects[k].transform.parent != null)
{
allGameObjects.RemoveAt(k);
}
}
return allGameObjects.ToArray();
}
直接把代码拿进去,然后判断就可以了。