VernierCaliper.cs 1.3 KB

12345678910111213141516171819202122232425262728293031323334
  1. using UnityEngine;
  2. using UnityEngine.UI;
  3. namespace JCUnityLib.UI
  4. {
  5. [ExecuteAlways]
  6. [RequireComponent(typeof(Image))]
  7. public class VernierCaliper : MonoBehaviour
  8. {
  9. const string _SHADER_NAME = "JC/UI/VernierCaliper";
  10. RectTransform _rectTransform;
  11. Image _image;
  12. public float lineWidth = 5;
  13. public float lineSpace = 10;
  14. public float lineHeight = 50;
  15. public Color lineColor = Color.black;
  16. void Update()
  17. {
  18. if (!_rectTransform) _rectTransform = GetComponent<RectTransform>();
  19. if (!_image) _image = GetComponent<Image>();
  20. if (_image.material == null || _image.material.shader.name != _SHADER_NAME)
  21. _image.material = new Material(Shader.Find(_SHADER_NAME));
  22. Material imageMaterial = _image.material;
  23. if (!imageMaterial) return;
  24. imageMaterial.SetFloat("_rectWidth", _rectTransform.rect.width);
  25. imageMaterial.SetFloat("_rectHeight", _rectTransform.rect.height);
  26. imageMaterial.SetFloat("_LineWidth", lineWidth);
  27. imageMaterial.SetFloat("_LineSpace", lineSpace);
  28. imageMaterial.SetFloat("_LineHeight", lineHeight);
  29. imageMaterial.SetColor("_LineColor", lineColor);
  30. }
  31. }
  32. }