GrassUtil.cs 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. using System.Collections.Generic;
  2. using UnityEngine;
  3. namespace MTE
  4. {
  5. public class GrassUtil
  6. {
  7. #region grass: three quads (star)
  8. public static void GenerateGrassStarObject(Vector3 position, Quaternion rotation,
  9. float width, float height, Material material,
  10. out GameObject grassGameObject, out MeshRenderer grassMeshRenderer, out Mesh grassMesh)
  11. {
  12. GameObject obj = new GameObject("GrassStar");
  13. var meshFilter = obj.AddComponent<MeshFilter>();
  14. var meshRenderer = obj.AddComponent<MeshRenderer>();
  15. var prototypeMesh = Resources.Load<Mesh>("Grass/Prototype_GrassStar");
  16. if (!prototypeMesh)
  17. {
  18. Debug.LogError("[MTE] Failed to load \"Grass/Prototype_GrassStar\" as Mesh.");
  19. }
  20. var mesh = Object.Instantiate(prototypeMesh);
  21. var vertices = new List<Vector3>(mesh.vertexCount);
  22. mesh.GetVertices(vertices);
  23. //apply width and height
  24. for (int i = 0; i < vertices.Count; i++)
  25. {
  26. var v = vertices[i];
  27. v.x *= width;
  28. v.y *= height;
  29. v.z *= width;
  30. vertices[i] = v;
  31. }
  32. mesh.SetVertices(vertices);
  33. meshRenderer.sharedMaterial = material;
  34. meshFilter.sharedMesh = mesh;
  35. meshRenderer.receiveShadows = true;
  36. meshRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off;
  37. obj.transform.position = position;
  38. obj.transform.rotation = rotation;
  39. obj.hideFlags = HideFlags.HideInHierarchy;
  40. obj.isStatic = true;// set to static for baking lightmap
  41. //output
  42. grassGameObject = obj;
  43. grassMeshRenderer = meshRenderer;
  44. grassMesh = mesh;
  45. }
  46. #endregion
  47. #region grass: one quad
  48. public static void GenerateGrassQuadObject(Vector3 position, Quaternion rotation,
  49. float width, float height, Material material,
  50. out GameObject grassGameObject, out MeshRenderer grassMeshRenderer, out Mesh grassMesh)
  51. {
  52. GameObject obj = new GameObject("GrassQuad");
  53. var meshFilter = obj.AddComponent<MeshFilter>();
  54. var meshRenderer = obj.AddComponent<MeshRenderer>();
  55. var prototypeMesh = Resources.Load<Mesh>("Grass/Prototype_GrassQuad");
  56. if (!prototypeMesh)
  57. {
  58. Debug.LogError("[MTE] Failed to load \"Grass/Prototype_GrassQuad\" as Mesh.");
  59. }
  60. var mesh = Object.Instantiate(prototypeMesh);
  61. //apply width and height
  62. var vertices = new List<Vector3>();
  63. mesh.GetVertices(vertices);
  64. for (int i = 0; i < vertices.Count; i++)
  65. {
  66. var v = vertices[i];
  67. v.x *= width;
  68. v.y *= height;
  69. v.z *= width;
  70. vertices[i] = v;
  71. }
  72. mesh.SetVertices(vertices);
  73. meshRenderer.sharedMaterial = material;
  74. meshFilter.sharedMesh = mesh;
  75. meshRenderer.receiveShadows = true;
  76. meshRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off;
  77. obj.transform.position = position;
  78. obj.transform.rotation = rotation;
  79. obj.hideFlags = HideFlags.HideInHierarchy;
  80. obj.isStatic = true;// set to static for baking lightmap
  81. //output
  82. grassGameObject = obj;
  83. grassMeshRenderer = meshRenderer;
  84. grassMesh = mesh;
  85. }
  86. #endregion
  87. }
  88. }