grass-rendering-prototype/Assets/Scripts/GrassChunk.cs
2024-09-28 03:53:49 +02:00

57 lines
1.6 KiB
C#

using System;
using UnityEngine;
[RequireComponent(typeof(MeshRenderer)), RequireComponent(typeof(MeshFilter))]
public class GrassChunk : MonoBehaviour {
[Header("LOD 0")]
public Material grassMaterialLOD0;
[Header("LOD 1")]
public Material grassMaterialLOD1;
[Header("LOD 2")]
public Material grassMaterialLOD2;
private int lod = -1;
[SerializeField]
public int LOD {
get { return lod; }
set {
if (lod == value) return;
lod = value;
var meshRenderer = GetComponent<MeshRenderer>();
switch (lod) {
case 0: meshRenderer.sharedMaterial = grassMaterialLOD0; break;
case 1: meshRenderer.sharedMaterial = grassMaterialLOD1; break;
case 2: meshRenderer.sharedMaterial = grassMaterialLOD2; break;
}
}
}
private void Update() {
UpdateLOD();
}
public void UpdateLOD() {
var meshRenderer = GetComponent<MeshRenderer>();
if (Camera.main) {
var sqrCamDist = meshRenderer.bounds.SqrDistance(Camera.main.transform.position);
if (sqrCamDist > 20f * 20f) {
LOD = 2;
}
else if (sqrCamDist > 5f * 5f) {
LOD = 1;
}
else {
LOD = 0;
}
}
}
private void OnDrawGizmos() {
Gizmos.color = new Color(1f, 0.7f, 0f, 0.5f);
var meshRenderer = GetComponent<MeshRenderer>();
var bounds = meshRenderer.bounds;
Gizmos.DrawWireCube(bounds.center, bounds.size);
}
}