39 lines
1.5 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|