| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- using UnityEngine;
- namespace InTerra
- {
- [ExecuteInEditMode]
- public class InTerra_TerrainData : MonoBehaviour
- {
- [HideInInspector] MaterialPropertyBlock mtb;
- [HideInInspector] public Terrain terrain;
- void Start()
- {
- gameObject.TryGetComponent<Terrain>(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<Terrain>(out terrain);
- }
- }
- }
- }
|