c# - 如何根据层次结构中的场景顺序对循环进行排序以 debug.log 游戏对象?
问题描述
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using UnityEditor;
using UnityEngine;
[ExecuteInEditMode]
public class CompareObjects : MonoBehaviour
{
private GameObject[] allObjects;
private void Start()
{
allObjects = FindObjectsOfType<GameObject>();
foreach (GameObject go in allObjects)
{
Debug.Log(go.name + " >>>>> " + go.scene.name + " >>>>> is active object");
}
}
}
现在它从我添加用于测试的第二个场景中的对象开始,然后有时在第一个场景的中间循环对象,然后返回到第二个。
相反,我希望它始终将层次结构中的顶部场景对象和下一个场景循环到底部。
如果层次结构是这样的:
Scene 1
GameObject t1
Scene 2
GameObject t2
Scene 3
GameObject t1
然后首先循环场景 1 的 t1,然后循环场景 3 的 t2 和 t1
解决方案
using System.Linq;
using UnityEditor;
using UnityEngine;
using UnityEngine.SceneManagement;
public static class EditorHelpers
{
[MenuItem("Tools/PrintHierarchy")]
public static void PrintHierarchy()
{
var scenes = Enumerable.Range(0, SceneManager.sceneCount)
.Select(SceneManager.GetSceneAt)
.Select(s => $"Scene {s.name}\n{GetSceneHierarchy(s.GetRootGameObjects())}")
.ToArray();
Debug.Log(string.Join("\n", scenes));
}
private static string GetSceneHierarchy(GameObject[] gameObjects)
{
var child = gameObjects.Select(g => GetChildHierarchyRecursively(g.transform)).ToArray();
return string.Join("\n", child);
}
private static string GetChildHierarchyRecursively(Transform parentTransform, string indent = " ")
{
var res = indent + parentTransform.name + "\n"
+ string.Join("\n",
Enumerable.Range(0, parentTransform.childCount)
.Select(i => GetChildHierarchyRecursively(parentTransform.GetChild(i), indent += " ")));
return res;
}
}
推荐阅读
- django - 将字段更改为 ForeignKey 时将列值设置为 NULL
- python - 使用python xpath将Javascript数组读取为键值对
- apache-spark - 带有 260gb 数据的 spark shuffle.FetchFailedException
- android - 如何在片段中嵌套 ViewPager2
- logging - 为库(或公共 jar)配置单独的附加程序
- java - 如何配置 Spring Security AuthenticationManager 以与 JdbcUserDetailsManager 一起使用?
- android - 使用 API 改造登录
- c++ - 将 txt 文件中的数据读入向量
- javascript - 如何保存“图像点击”值,以便我可以在我的 PHP 程序中继续使用该值?
- python - 在正则表达式中匹配两个单词之间的所有大写单词