如何在两个场景中遍历层次结构中的所有游戏对象,包括禁用的对象以及所有子对象?

丹尼尔·利普(Daniel Lip)
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEditor;
using UnityEngine;

public class CompareObjects : EditorWindow
{
    string searchString = "";
    List<GameObject> items = FindObjectsOfType(typeof(GameObject)).ToList();

    void OnGUI()
    {
        GUILayout.BeginHorizontal(EditorStyles.toolbar);
        GUILayout.FlexibleSpace();
        searchString = GUILayout.TextField(searchString, EditorStyles.toolbarTextField);
        GUILayout.EndHorizontal();

        // Do comparison here. For example
        for (int i = 0; i < items.Length; i++)
        {
            if (items[i].name.Contains(searchString))
            {
                GUI.Label(items[i].name);
            }
        }
    }
}

第一个问题是我无法转换以下数组:

FindObjectsOfType(typeof(GameObject))

列出。

秒如何在两个场景中遍历对象?我想在场景a和场景b的对象之间进行比较,并且还能够缩小对具有特定组件的对象的搜索,并在EditorWindow中列出结果:在场景A和列表B中列出具有组件的对象A场景B中具有组件的对象

例如,如果我在搜索栏中键入:Space,BoxCollider然后,它将在两个场景中找到所有包含名称Space且还附加有BoxCollider或未附加BoxCollider的对象。

我想知道结果中哪些对象名称Space具有boxcollider,而没有。

范例:

List A : Space1 BoxCollider -- Scene A
List A : Space2 Empty -- Scene A

List B : Space1 Empty -- Scene B
List B : Space2 BoxCollider -- Scene B

像这样的比较。

拉多莫·斯拉波什皮斯基

我无法转换的数组

方法FindObjectsOfType(Type)返回对象数组,可以使用LINQ方法OfType将这些对象转换为列表

List<GameObject> items = FindObjectsOfType(typeof(GameObject)).OfType<GameObject>.ToList();

或者只是使用方法的通用替代 FindObjectsOfType<T>()

List<GameObject> items = GameObject.FindObjectsOfType<GameObject>().ToList();

秒如何在两个场景中遍历对象?

您需要从中选择所有场景SceneManager并对其进行循环GetRootGameObjects()

如果您需要循环所有对象并进行一些手动计算-您可以像此处所述手动织布如果知道确切需要什么组件,则可以将方法public Component[] GetComponentsInChildren(Type t, bool includeInactive);与场景根对象一起使用(请确保将其设置includeInactiveTrue要在非活动对象中搜索)

我想知道结果中哪些对象名称Space具有boxcollider,而没有。

using System.Linq;
using UnityEditor;
using UnityEngine;
using UnityEngine.SceneManagement;

public static class Searcher
{
    [MenuItem("Tools/PrintSearch")]
    public static void PrintSearch()
    {
        var objectName = "Space";
        var componentType = typeof(BoxCollider);

        var scenes = Enumerable.Range(0, SceneManager.sceneCount)
            .Select(SceneManager.GetSceneAt)
            .ToArray();
        var objectsWithNames = scenes
            .ToDictionary(s => s, s=> GetSceneObjectsWithName(s, objectName.ToLower()));

        var forLog = objectsWithNames
            .SelectMany(pair => pair.Value.Select(child =>
                $"Scene {pair.Key.name}: object name '{child.gameObject.name}' {(child.GetComponent(componentType) != null ? "contains" : "do not contains")} component {componentType.Name}"));

        Debug.Log(string.Join("\n", forLog));
    }

    private static Transform[] GetSceneObjectsWithName(Scene scene, string objectName)
    {
        return scene.GetRootGameObjects()
            .SelectMany(g => GetChildHierarchyRecursively(g.transform))
            .Where(t=>t.gameObject.name.ToLower().Contains(objectName))
            .ToArray();
    }

    private static IEnumerable<Transform> GetChildHierarchyRecursively(Transform parentTransform)
    {
        yield return parentTransform;
        if (parentTransform.childCount > 0)
            yield return parentTransform;
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

遍历场景中的所有对象/精灵

来自分类Dev

遍历div中的所有div(包括子对象)

来自分类Dev

如何遍历容器中的所有对象?

来自分类Dev

如何遍历容器中的所有对象?

来自分类Dev

如何抓取所有子游戏对象?

来自分类Dev

如何抓取所有子游戏对象?

来自分类Dev

Threejs从场景中删除所有对象

来自分类Dev

Java-从两个相等的对象中,返回合并所有字段的新对象

来自分类Dev

如何根据DateTime值的接近度将两个列表中的所有对象匹配为两个对

来自分类Dev

如何从我的R环境中删除除两个名称不同的对象以外的所有对象

来自分类Dev

遍历gridview中的所有对象

来自分类Dev

遍历json对象中的所有项目

来自分类Dev

如何在场景中找到所有Cube游戏对象?

来自分类Dev

如何在场景中找到所有Cube游戏对象?

来自分类Dev

如何在Django中访问与模型相关的对象的所有子对象?

来自分类Dev

跨两个表建模数据时如何获取父对象的所有子对象?

来自分类Dev

如果在javascript中具有相同ID,如何合并数组中所有属性的两个对象?

来自分类Dev

如何在两个对象数组之间创建所有可能的组合?

来自分类Dev

获取Scala中的所有子对象

来自分类Dev

VisualVM:如何查找堆中对象的大小,包括其字段中引用的所有对象?

来自分类Dev

通过递归遍历所有属性的属性来比较两个对象?

来自分类Dev

在javascript中,如何创建一个遍历所有对象的for循环?

来自分类Dev

从场景中移除所有对象的正确方法

来自分类Dev

如何从与一对一字段相关的两个模型中获取所有对象的列表

来自分类Dev

如何访问对象数组中的属性而不在php中遍历所有对象?

来自分类Dev

如何访问对象数组中的属性而不在php中遍历所有对象?

来自分类Dev

如何显示模板中的所有子对象?

来自分类Dev

如何获得数组或列出游戏对象下的所有子游戏对象?

来自分类Dev

折叠层次结构中的选定游戏对象

Related 相关文章

  1. 1

    遍历场景中的所有对象/精灵

  2. 2

    遍历div中的所有div(包括子对象)

  3. 3

    如何遍历容器中的所有对象?

  4. 4

    如何遍历容器中的所有对象?

  5. 5

    如何抓取所有子游戏对象?

  6. 6

    如何抓取所有子游戏对象?

  7. 7

    Threejs从场景中删除所有对象

  8. 8

    Java-从两个相等的对象中,返回合并所有字段的新对象

  9. 9

    如何根据DateTime值的接近度将两个列表中的所有对象匹配为两个对

  10. 10

    如何从我的R环境中删除除两个名称不同的对象以外的所有对象

  11. 11

    遍历gridview中的所有对象

  12. 12

    遍历json对象中的所有项目

  13. 13

    如何在场景中找到所有Cube游戏对象?

  14. 14

    如何在场景中找到所有Cube游戏对象?

  15. 15

    如何在Django中访问与模型相关的对象的所有子对象?

  16. 16

    跨两个表建模数据时如何获取父对象的所有子对象?

  17. 17

    如果在javascript中具有相同ID,如何合并数组中所有属性的两个对象?

  18. 18

    如何在两个对象数组之间创建所有可能的组合?

  19. 19

    获取Scala中的所有子对象

  20. 20

    VisualVM:如何查找堆中对象的大小,包括其字段中引用的所有对象?

  21. 21

    通过递归遍历所有属性的属性来比较两个对象?

  22. 22

    在javascript中,如何创建一个遍历所有对象的for循环?

  23. 23

    从场景中移除所有对象的正确方法

  24. 24

    如何从与一对一字段相关的两个模型中获取所有对象的列表

  25. 25

    如何访问对象数组中的属性而不在php中遍历所有对象?

  26. 26

    如何访问对象数组中的属性而不在php中遍历所有对象?

  27. 27

    如何显示模板中的所有子对象?

  28. 28

    如何获得数组或列出游戏对象下的所有子游戏对象?

  29. 29

    折叠层次结构中的选定游戏对象

热门标签

归档