MapDisplay.cs 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. using UnityEngine;
  2. using System.Collections;
  3. public class MapDisplay : MonoBehaviour {
  4. public Renderer textureRender;
  5. public MeshFilter meshFilter;
  6. public MeshRenderer meshRenderer;
  7. public void DrawTexture(Texture2D texture) {
  8. textureRender.sharedMaterial.mainTexture = texture;
  9. textureRender.transform.localScale = new Vector3 (texture.width, 1, texture.height);
  10. }
  11. public void DrawMesh(MeshData meshData) {
  12. meshFilter.sharedMesh = meshData.CreateMesh ();
  13. meshFilter.transform.localScale = Vector3.one * FindFirstObjectByType<MapGenerator> ().terrainData.uniformScale;
  14. ApplyVertexColors(meshFilter.sharedMesh);
  15. }
  16. void ApplyVertexColors(Mesh mesh)
  17. {
  18. Vector3[] vertices = mesh.vertices;
  19. Color[] colors = new Color[vertices.Length];
  20. float maxH = 25f;
  21. for (int i = 0; i < vertices.Length; i++)
  22. {
  23. float heightPercent = Mathf.InverseLerp(0, maxH, vertices[i].y);
  24. // --- THE BIOME LAYERS ---
  25. if (heightPercent < 0.05f)
  26. {
  27. colors[i] = new Color(0.1f, 0.3f, 0.6f); // Deep Water (Dark Blue)
  28. }
  29. else if (heightPercent < 0.12f)
  30. {
  31. colors[i] = new Color(0.9f, 0.8f, 0.6f); // Sand/Beach (Tan)
  32. }
  33. else if (heightPercent < 0.45f)
  34. {
  35. colors[i] = new Color(0.2f, 0.5f, 0.1f); // Grass (Rich Green)
  36. }
  37. else if (heightPercent < 0.65f)
  38. {
  39. colors[i] = new Color(0.4f, 0.35f, 0.3f); // Rock Color 1 (Brown-Grey)
  40. }
  41. else if (heightPercent < 0.85f)
  42. {
  43. colors[i] = new Color(0.3f, 0.3f, 0.3f); // Rock Color 2 (Dark Grey)
  44. }
  45. else
  46. {
  47. colors[i] = Color.white; // Snow (White)
  48. }
  49. }
  50. mesh.colors = colors;
  51. }
  52. }