StraightLineMesh.cs 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. using UnityEngine;
  2. namespace FairyGUI
  3. {
  4. /// <summary>
  5. ///
  6. /// </summary>
  7. public class StraightLineMesh : IMeshFactory
  8. {
  9. /// <summary>
  10. ///
  11. /// </summary>
  12. public Color color;
  13. /// <summary>
  14. ///
  15. /// </summary>
  16. public Vector3 origin;
  17. /// <summary>
  18. ///
  19. /// </summary>
  20. public Vector3 end;
  21. /// <summary>
  22. ///
  23. /// </summary>
  24. public float lineWidth;
  25. /// <summary>
  26. ///
  27. /// </summary>
  28. public bool repeatFill;
  29. public StraightLineMesh()
  30. {
  31. color = Color.black;
  32. lineWidth = 1;
  33. }
  34. /// <summary>
  35. ///
  36. /// </summary>
  37. /// <param name="lineWidth"></param>
  38. /// <param name="color"></param>
  39. /// <param name="repeatFill"></param>
  40. public StraightLineMesh(float lineWidth, Color color, bool repeatFill)
  41. {
  42. this.lineWidth = lineWidth;
  43. this.color = color;
  44. this.repeatFill = repeatFill;
  45. }
  46. public void OnPopulateMesh(VertexBuffer vb)
  47. {
  48. if (origin == end)
  49. return;
  50. float length = Vector2.Distance(origin, end);
  51. Vector3 lineVector = end - origin;
  52. Vector3 widthVector = Vector3.Cross(lineVector, new Vector3(0, 0, 1));
  53. widthVector.Normalize();
  54. Vector3 v0, v1, v2, v3;
  55. if (repeatFill)
  56. {
  57. float ratio = length / vb.textureSize.x;
  58. v0 = VertexBuffer.NormalizedUV[0];
  59. v1 = VertexBuffer.NormalizedUV[1];
  60. v2 = new Vector2(ratio, 1);
  61. v3 = new Vector2(ratio, 0);
  62. }
  63. else
  64. {
  65. v0 = new Vector2(vb.uvRect.xMin, vb.uvRect.yMin);
  66. v1 = new Vector2(vb.uvRect.xMin, vb.uvRect.yMax);
  67. v2 = new Vector2(vb.uvRect.xMax, vb.uvRect.yMax);
  68. v3 = new Vector2(vb.uvRect.xMax, vb.uvRect.yMin);
  69. }
  70. vb.AddVert(origin - widthVector * lineWidth * 0.5f, color, v0);
  71. vb.AddVert(origin + widthVector * lineWidth * 0.5f, color, v1);
  72. vb.AddVert(end + widthVector * lineWidth * 0.5f, color, v2);
  73. vb.AddVert(end - widthVector * lineWidth * 0.5f, color, v3);
  74. vb.AddTriangles();
  75. }
  76. }
  77. }