TextureData.cs 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. using UnityEngine;
  2. using System.Collections;
  3. using System.Linq;
  4. [CreateAssetMenu()]
  5. public class TextureData : UpdatableData {
  6. const int textureSize = 512;
  7. const TextureFormat textureFormat = TextureFormat.RGB565;
  8. public Layer[] layers;
  9. float savedMinHeight;
  10. float savedMaxHeight;
  11. public void ApplyToMaterial(Material material) {
  12. material.SetInt ("layerCount", layers.Length);
  13. material.SetColorArray ("baseColours", layers.Select(x => x.tint).ToArray());
  14. material.SetFloatArray ("baseStartHeights", layers.Select(x => x.startHeight).ToArray());
  15. material.SetFloatArray ("baseBlends", layers.Select(x => x.blendStrength).ToArray());
  16. material.SetFloatArray ("baseColourStrength", layers.Select(x => x.tintStrength).ToArray());
  17. material.SetFloatArray ("baseTextureScales", layers.Select(x => x.textureScale).ToArray());
  18. Texture2DArray texturesArray = GenerateTextureArray (layers.Select (x => x.texture).ToArray ());
  19. material.SetTexture ("baseTextures", texturesArray);
  20. UpdateMeshHeights (material, savedMinHeight, savedMaxHeight);
  21. }
  22. public void UpdateMeshHeights(Material material, float minHeight, float maxHeight) {
  23. savedMinHeight = minHeight;
  24. savedMaxHeight = maxHeight;
  25. material.SetFloat ("minHeight", minHeight);
  26. material.SetFloat ("maxHeight", maxHeight);
  27. }
  28. Texture2DArray GenerateTextureArray(Texture2D[] textures) {
  29. Texture2DArray textureArray = new Texture2DArray (textureSize, textureSize, textures.Length, textureFormat, true);
  30. for (int i = 0; i < textures.Length; i++) {
  31. textureArray.SetPixels (textures [i].GetPixels (), i);
  32. }
  33. textureArray.Apply ();
  34. return textureArray;
  35. }
  36. [System.Serializable]
  37. public class Layer {
  38. public Texture2D texture;
  39. public Color tint;
  40. [Range(0,1)]
  41. public float tintStrength;
  42. [Range(0,1)]
  43. public float startHeight;
  44. [Range(0,1)]
  45. public float blendStrength;
  46. public float textureScale;
  47. }
  48. }