Ruler.cs 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. using System;
  2. using UnityEngine;
  3. public class Ruler : MonoBehaviour
  4. {
  5. private void OnDrawGizmos()
  6. {
  7. if (string.IsNullOrEmpty(this._property))
  8. {
  9. this._property = base.name;
  10. }
  11. if (!this._show)
  12. {
  13. return;
  14. }
  15. this._color.a = this._alpha;
  16. Gizmos.color = this._color;
  17. this.DrawCube(base.transform.position + this._offset, this._size, this._angle);
  18. DebugX.DrawText(this._property + this._size, base.transform.position);
  19. }
  20. private void DrawCube(Vector3 center, Vector2 size, float angle)
  21. {
  22. float num = size.x / 2f;
  23. float num2 = size.y / 2f;
  24. Vector3 vector = this.VectorRotate(new Vector2(-num, num2), angle);
  25. Vector3 vector2 = this.VectorRotate(new Vector2(num, num2), angle);
  26. Vector3 vector3 = this.VectorRotate(new Vector2(-num, -num2), angle);
  27. Vector3 vector4 = this.VectorRotate(new Vector2(num, -num2), angle);
  28. switch (this._ancor)
  29. {
  30. case Ruler.AncorEnum.TopLeft:
  31. center -= vector;
  32. break;
  33. case Ruler.AncorEnum.TopRight:
  34. center -= vector2;
  35. break;
  36. case Ruler.AncorEnum.BottomLeft:
  37. center -= vector3;
  38. break;
  39. case Ruler.AncorEnum.BottomRight:
  40. center -= vector4;
  41. break;
  42. }
  43. vector += center;
  44. vector2 += center;
  45. vector3 += center;
  46. vector4 += center;
  47. Gizmos.DrawLine(vector, vector2);
  48. Gizmos.DrawLine(vector2, vector4);
  49. Gizmos.DrawLine(vector4, vector3);
  50. Gizmos.DrawLine(vector3, vector);
  51. }
  52. private Vector3 VectorRotate(Vector2 vector, float angle)
  53. {
  54. angle *= 0.0174532924f;
  55. float x = vector.x;
  56. float y = vector.y;
  57. float x2 = x * Mathf.Cos(angle) + y * Mathf.Sin(angle);
  58. float y2 = -x * Mathf.Sin(angle) + y * Mathf.Cos(angle);
  59. return new Vector3(x2, y2);
  60. }
  61. [SerializeField]
  62. private bool _show = true;
  63. [SerializeField]
  64. private string _property;
  65. [SerializeField]
  66. private Ruler.AncorEnum _ancor = Ruler.AncorEnum.BottomLeft;
  67. [SerializeField]
  68. private Vector2 _size = new Vector2(20f, 10f);
  69. [SerializeField]
  70. private Vector3 _offset;
  71. [SerializeField]
  72. private float _angle;
  73. [SerializeField]
  74. private Color _color = Color.cyan;
  75. [Range(0f, 1f)]
  76. [SerializeField]
  77. private float _alpha = 0.5f;
  78. private enum AncorEnum
  79. {
  80. TopLeft,
  81. TopRight,
  82. BottomLeft,
  83. BottomRight
  84. }
  85. }