Files
2026-03-04 09:37:33 +08:00

39 lines
1.5 KiB
C#

using UnityEngine;
using UnityEngine.Rendering;
namespace NatureManufacture.RAM
{
public static class LodSystemGenerator
{
public static void GenerateLodSystem(GameObject go, Material meshMaterial, MeshFilter meshFilter, bool receiveShadows, ShadowCastingMode shadowCastingMode, bool generateLodGPU, Vector4 lodDistance, float lodRefreshTime)
{
GameObject gameObject = new GameObject(go.name + "- MeshPartLOD_" + (generateLodGPU ? "GPU" : "CPU"));
gameObject.transform.SetParent(go.transform, worldPositionStays: false);
gameObject.transform.localPosition = Vector3.zero;
gameObject.transform.localEulerAngles = Vector3.zero;
gameObject.transform.localScale = Vector3.one;
gameObject.AddComponent<MeshFilter>();
MeshRenderer meshRenderer = gameObject.AddComponent<MeshRenderer>();
meshRenderer.sharedMaterial = meshMaterial;
meshRenderer.receiveShadows = receiveShadows;
meshRenderer.shadowCastingMode = shadowCastingMode;
gameObject.SetActive(value: false);
if (generateLodGPU)
{
GPULodManager gPULodManager = gameObject.AddComponent<GPULodManager>();
gPULodManager.SourceMeshFilter = meshFilter;
gPULodManager.LODDistance = lodDistance;
gPULodManager.RefreshTime = lodRefreshTime;
}
else
{
LodManager lodManager = gameObject.AddComponent<LodManager>();
lodManager.SourceMeshFilter = meshFilter;
lodManager.LODDistance = lodDistance;
lodManager.RefreshTime = lodRefreshTime;
}
gameObject.SetActive(value: true);
}
}
}