Files
JJBB/Assets/Project/Script/Object/Path/SceneSizeObj.cs
2024-08-23 15:49:34 +08:00

92 lines
3.1 KiB
C#

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<GameObject> _CubesX = new List<GameObject>();
private readonly List<GameObject> _CubesY = new List<GameObject>();
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<Camera>();
_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;
}
}