每个物体都属于一个Scene,而通过Scene.GetRootGameObjects()接口就可以获得该Scene的所有根物体,我们只需要遍历所有Scene即可
List<GameObject> roots = new List<GameObject>();
for (int i = 0; i < SceneManager.sceneCount; i++)
{
var scene = SceneManager.GetSceneAt(i);
if (!scene.isLoaded) continue;
roots.AddRange(scene.GetRootGameObjects());
}
而被DontDestroyOnLoad处理过的物体就不再属于原来的场景了,它们被分配到一个隐藏的叫做DontDestroyOnLoad的新场景里。这个场景无法通过SceneMananger找到,但是我们可以曲线救国,准备一个已经被DontDestroyOnLoad的物体,然后通过接口GameObject.scene即可获取该场景了文章来源:https://www.toymoban.com/news/detail-510744.html
foreach (var go in dontDestoryGo.scene.GetRootGameObjects())
{
// 注意该场景里经常会有各种隐藏物体,把它们屏蔽掉
if ((go.hideFlags & HideFlags.HideInHierarchy) == 0)
{
roots.Add(go);
}
}
上面两部分结合起来,就能拿到与Hierarchy一致的所有根物体了文章来源地址https://www.toymoban.com/news/detail-510744.html
到了这里,关于Unity获取场景中所有根物体的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!