ExportTrees.cs 2.4 KB

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