ExportDetailMesh.cs 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. namespace AmazingAssets.TerrainToMesh.Example
  5. {
  6. [RequireComponent(typeof(MeshFilter), typeof(MeshRenderer))]
  7. public class ExportDetailMesh : MonoBehaviour
  8. {
  9. public TerrainData terrainData;
  10. public int vertexCountHorizontal = 100;
  11. public int vertexCountVertical = 100;
  12. void Start()
  13. {
  14. if (terrainData == null)
  15. return;
  16. //1. Export mesh from terrain////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  17. Mesh terrainMesh = terrainData.TerrainToMesh().ExportMesh(vertexCountHorizontal, vertexCountVertical, TerrainToMesh.Normal.CalculateFromMesh);
  18. GetComponent<MeshFilter>().sharedMesh = terrainMesh;
  19. //2. Create material////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  20. string shaderName = Utilities.GetUnityDefaultShader(); //Default shader based on used render pipeline
  21. Material material = new Material(Shader.Find(shaderName));
  22. GetComponent<Renderer>().sharedMaterial = material;
  23. //3. Export grass//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  24. DetailPrototypesData[] detailPrototypesData = terrainData.TerrainToMesh().ExportDetailMeshData(vertexCountHorizontal, vertexCountVertical, 1, 1, 8, 1);
  25. for (int t = 0; t < detailPrototypesData.Length; t++)
  26. {
  27. for (int p = 0; p < detailPrototypesData[t].position.Count; p++)
  28. {
  29. //Instantiate detail mesh prefab
  30. GameObject detailPrototype = Instantiate(detailPrototypesData[t].detailPrototype.prototype);
  31. //Set position
  32. detailPrototype.transform.position = detailPrototypesData[t].position[p];
  33. //Add rotation
  34. //detailPrototype.transform.rotation = Quaternion.Euler(0, Random.value * 360, 0);
  35. //Scale
  36. detailPrototype.transform.localScale = detailPrototypesData[t].scale[p];
  37. //Add parent
  38. detailPrototype.transform.SetParent(this.gameObject.transform, false);
  39. }
  40. }
  41. }
  42. }
  43. }