using UnityEngine; namespace InTerra { [ExecuteInEditMode] public class InTerra_TerrainData : MonoBehaviour { [HideInInspector] MaterialPropertyBlock mtb; [HideInInspector] public Terrain terrain; void Start() { gameObject.TryGetComponent(out terrain); } void Update() { if (terrain) { if (terrain.materialTemplate && InTerra_Data.EightLayersEnabled(terrain.materialTemplate) && terrain.terrainData.terrainLayers.Length > 4) { if (mtb == null) { mtb = new MaterialPropertyBlock(); } terrain.GetSplatMaterialPropertyBlock(mtb); if (!mtb.GetTexture("_Control1") || !mtb.GetTexture("_Splat4")) { for (int i = 0; i < terrain.terrainData.alphamapLayers && i < 8; i++) { InTerra_Data.TerrainLaeyrDataToTerrain(terrain.terrainData.size, terrain.terrainData.terrainLayers[i], i, mtb); } mtb.SetTexture("_Control", terrain.terrainData.alphamapTextureCount > 0 ? terrain.terrainData.alphamapTextures[0] : Texture2D.redTexture); mtb.SetTexture("_Control1", terrain.terrainData.alphamapTextureCount > 1 ? terrain.terrainData.alphamapTextures[1] : Texture2D.blackTexture); terrain.SetSplatMaterialPropertyBlock(mtb); terrain.terrainData.SetBaseMapDirty(); } } else { if(mtb != null) { mtb.Clear(); mtb.SetFloat("_NumLayersCount", terrain.terrainData.alphamapLayers); terrain.SetSplatMaterialPropertyBlock(mtb); } } } else { gameObject.TryGetComponent(out terrain); } } } }