using System.Collections; using System.Collections.Generic; using UnityEngine; using System.Linq; // used for Sum of array public class ProceduralTextureScript : MonoBehaviour { public float snowHeight; public float rockSlope; // Start is called before the first frame update void Start() { } float transition(float start, float end, float value) { if (start > end) { return 1 - transition(end, start, value); } if (value < start) { return 0; } if (value >= end) { return 1; } var scaledValue = (value - start) / (end - start); return scaledValue; } public void runProcedrualTexturing() { var terrain = gameObject.GetComponent(); var layers = terrain.terrainData.alphamapLayers; var height = terrain.terrainData.alphamapWidth; var width = terrain.terrainData.alphamapHeight; Debug.Log(layers); Debug.Log(height); Debug.Log(width); Debug.Log(terrain.terrainData.GetInterpolatedHeight(0.5f, 0.5f)); var newSplatMap = new float[width, height, layers]; //for (int i=0; i<) for (int i = 0; i < width; i++) { for (int j = 0; j < width; j++) { float x = j / (float)height; float y = i / (float)width; var splatWeights = new float[layers]; var terrainSteepness = terrain.terrainData.GetSteepness(x, y); for (int k = 0; k < layers; k++) { splatWeights[k] = terrainSteepness; } float sum = splatWeights.Sum(); for (int k = 0; k < layers; k++) { newSplatMap[i, j, k] = splatWeights[k] / sum; } } } terrain.terrainData.SetAlphamaps(0, 0, newSplatMap); } // Update is called once per frame void Update() { } }