using System.Collections.Generic; using UnityEngine; [ExecuteInEditMode] public class SceneSizeObj : MonoBehaviour { public Vector2 _OrgPos = Vector2.zero; public Vector2 _Size = new Vector2(100, 100); private readonly List _CubesX = new List(); private readonly List _CubesY = new List(); private Transform _CubeXBase; private Transform _CubeYBase; private Vector2 _Orgsize; private Camera _SceneCamera; private void Start() { transform.position = new Vector3(0, 500, 0); var cameraObj = new GameObject("SizeCamera"); cameraObj.transform.SetParent(transform); cameraObj.transform.localRotation = Quaternion.Euler(90, 0, 0); cameraObj.transform.localPosition = new Vector3(0, 0, 0); _SceneCamera = cameraObj.AddComponent(); _SceneCamera.orthographic = true; _SceneCamera.clearFlags = CameraClearFlags.SolidColor; var cubeX = new GameObject("CubeX"); cubeX.transform.SetParent(transform); _CubeXBase = cubeX.transform; var cubeY = new GameObject("CubeY"); cubeY.transform.SetParent(transform); _CubeYBase = cubeY.transform; for (var i = 0; i < 1000; ++i) { var newBox = GameObject.CreatePrimitive(PrimitiveType.Cube); newBox.transform.SetParent(cubeX.transform); newBox.transform.localPosition = new Vector3(i, 200, 0); if (i < _Size.x) newBox.SetActive(true); else newBox.SetActive(false); _CubesX.Add(newBox); var newBox2 = GameObject.CreatePrimitive(PrimitiveType.Cube); newBox2.transform.SetParent(cubeY.transform); newBox2.transform.localPosition = new Vector3(0, 200, i); if (i < _Size.y) newBox2.SetActive(true); else newBox2.SetActive(false); _CubesY.Add(newBox2); } } private void Update() { transform.position = new Vector3(_OrgPos.x + _Size.x * 0.5f, 500, _OrgPos.y + _Size.y * 0.5f); //_SceneCamera.transform.position = new Vector3(_OrgPos.x + 50, 1000, _OrgPos.y + 50); _SceneCamera.orthographicSize = Mathf.Max(_Size.x, _Size.y); _CubeXBase.transform.position = new Vector3(_OrgPos.x, -200, _OrgPos.y); _CubeYBase.transform.position = new Vector3(_OrgPos.x, -200, _OrgPos.y); UpdateSizeObj(); } private void UpdateSizeObj() { if (_Orgsize == _Size) return; if (_Orgsize.x > _Size.x) for (var i = (int) _Orgsize.x; i > _Size.x; --i) _CubesX[i].SetActive(false); else for (var i = (int) _Orgsize.x; i < _Size.x; ++i) _CubesX[i].SetActive(true); if (_Orgsize.y > _Size.y) for (var i = (int) _Orgsize.y; i > _Size.y; --i) _CubesY[i].SetActive(false); else for (var i = (int) _Orgsize.y; i < _Size.y; ++i) _CubesY[i].SetActive(true); _Orgsize = _Size; } }