Files
2026-03-04 10:03:45 +08:00

73 lines
1.8 KiB
C#

using System.Collections.Generic;
using System.Linq;
using UnityEngine;
public class SceneCleanTool : MonoBehaviour
{
[SerializeField]
private List<MeshRenderer> renderers;
[SerializeField]
private Terrain terrain;
[SerializeField]
private int detailPrototypeID;
[SerializeField]
private int treePrototypeID;
[SerializeField]
private List<GameObject> detailGameObjects;
private void GetAllTerrainDetails()
{
_ = terrain.terrainData.detailPrototypes;
int[,] detailLayer = terrain.terrainData.GetDetailLayer(0, 0, terrain.terrainData.detailWidth, terrain.terrainData.detailHeight, detailPrototypeID);
for (int i = 0; i < terrain.terrainData.detailHeight; i++)
{
for (int j = 0; j < terrain.terrainData.detailWidth; j++)
{
if (detailLayer[j, i] > 0)
{
float num = (float)j / (float)terrain.terrainData.detailWidth;
float num2 = (float)i / (float)terrain.terrainData.detailHeight;
_ = terrain.transform.position + new Vector3(num * terrain.terrainData.size.x, 0f, num2 * terrain.terrainData.size.z);
TreeInstance instance = new TreeInstance
{
position = new Vector3(num, 0f, num2),
prototypeIndex = treePrototypeID,
widthScale = 1f,
heightScale = 1f,
color = Color.white,
lightmapColor = Color.white
};
terrain.AddTreeInstance(instance);
detailLayer[j, i] = 0;
}
}
}
terrain.terrainData.SetDetailLayer(0, 0, detailPrototypeID, detailLayer);
Debug.Log("Transfer completed.");
}
private void FindAllDisableMeshRenderer()
{
renderers = new List<MeshRenderer>();
foreach (MeshRenderer item in GetComponentsInChildren<MeshRenderer>().ToList())
{
if (!item.enabled)
{
renderers.Add(item);
}
}
}
private void DestroyRenderersFromList()
{
foreach (MeshRenderer renderer in renderers)
{
Object.DestroyImmediate(renderer.gameObject);
}
}
}