为了账号安全,请及时绑定邮箱和手机立即绑定

如何按场景名称获取场景中的游戏对象列表但只能获取一次?

如何按场景名称获取场景中的游戏对象列表但只能获取一次?

C#
杨魅力 2021-12-05 17:14:53
内部 GUILayout 按钮:if (GUILayout.Button("Test")){    var selection = Selection.gameObjects.ToList();    var scenesNames = ScriptsManager.ListScenes();    List<Transform> objectsInScene = new List<Transform>();    if (prefab != null && selection.Count > 0)    {        for (var i = selection.Count - 1; i >= 0; --i)        {            var selected = selection[i];            for (int x = 0; x < scenesNames.Count; x++)            {                if (selected.scene.name == scenesNames[x])                {                    objectsInScene.AddRange(ScriptsManager.GetSceneObjects(scenesNames[x]));                }            }        }和方法 GetSceneObjects:public static List<Transform> GetSceneObjects(string sceneName){    Scene s = SceneManager.GetSceneByName(sceneName);    List<Transform> childs = new List<Transform>();    GameObject[] gameObjects = s.GetRootGameObjects();    for (int i = 0; i < gameObjects.Length; i++)    {        if (!childs.Contains(gameObjects[i].transform))            childs.Add(gameObjects[i].transform);        foreach (Transform go in gameObjects[i].transform)        {            if (!childs.Contains(go))                childs.Add(go);        }    }    return childs;}在方法中GetSceneObjects,我试图过滤掉相同的对象,但它不起作用。例如,如果在 GUILayout 按钮中,我在层次结构中选择了一个场景中的 3 个对象和另一个场景中的 1 个对象,我将在 List objectsInScene 中获得 16 个对象。但这是错误的。我在第一个场景中选择的 3 个对象都来自同一个场景,因此它应该只向 List 添加 5 个对象一次,因为第一个场景总共有 5 个对象。但是相反,它添加了 15 个对象,因为它被选中的对象使它获得场景中的所有 5 个对象。最后,我有一个包含 16 个对象的列表,但它应该只列出 6 个对象。第一个场景有 5 个对象,第二个场景有 1 个对象。
查看完整描述

1 回答

?
12345678_0001

TA贡献1802条经验 获得超5个赞

你做错了,但快速解决方法是改变

List<Transform> objectsInScene = new List<Transform>(); 到 HashSet<Transform> objectsInScene = new HashSet<Transform>();

objectsInScene.AddRange(ScriptsManager.GetSceneObjects(scenesNames[x])); 到 objectsInScene.UnionWith(ScriptsManager.GetSceneObjects(scenesNames[x]));

最后,objectsInScene.ToList()如果需要 List 实例,您可以这样做。


查看完整回答
反对 回复 2021-12-05
  • 1 回答
  • 0 关注
  • 180 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信