unity 获取scene整体的bound包围盒以及center

如下:多场景的情况也适合

参考: https://gamedev.stackexchange.com/questions/134675/unity-bounds-includes-the-center-of-the-scene

 1         private List<Bounds> _worldBoundsList = new List<Bounds>();
 2         [Button("testBound")]
 3         public void TestBounds()
 4         {
 5             _worldBoundsList.Clear();
 6             for (int i = 0; i < SceneManager.sceneCount; i++)
 7             {
 8                 var scene = SceneManager.GetSceneAt(i);
 9                 GameObject[] gameObjects = scene.GetRootGameObjects();
10                 List<Renderer> renderers = new List<Renderer>();
11                 foreach (var o in gameObjects)
12                 {
13                     renderers.AddRange(o.GetComponentsInChildren<Renderer>());
14                 }
15                 var worldBounds = renderers[0].bounds;
16                 for (int j = 1; j < renderers.Count; ++j)
17                 {
18                     worldBounds.Encapsulate(renderers[j].bounds);
19                 }
20                 _worldBoundsList.Add(worldBounds);
21             }
22         }
23         private void OnDrawGizmos()
24         {
25             foreach (var bounds in _worldBoundsList)
26             {
27                 Gizmos.color = new Color(0f, 1f, 0f, 0.1f);
28                 Gizmos.DrawCube(bounds.center, bounds.size);
29 
30                 Gizmos.color = new Color(0f, 1f, 0f, 1f);
31                 Gizmos.DrawWireCube(bounds.center, bounds.size);
32             }
33         }

 

posted @ 2022-11-10 14:57  sun_dust_shadow  阅读(394)  评论(0编辑  收藏  举报