UISpriteInLabel.cs 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. using System;
  2. using System.Collections;
  3. using UnityEngine;
  4. [RequireComponent(typeof(UILabel), typeof(UICallback))]
  5. public class UISpriteInLabel : MonoBehaviour, ICallBackable
  6. {
  7. [ContextMenu("Execute")]
  8. private void OnModifyLocalization()
  9. {
  10. base.StartCoroutine(this.OnModifyLocalizationCoroutine());
  11. }
  12. public void OnCall()
  13. {
  14. this.OnModifyLocalization();
  15. }
  16. private IEnumerator OnModifyLocalizationCoroutine()
  17. {
  18. if (Application.isPlaying)
  19. {
  20. yield return null;
  21. }
  22. if (this._label == null)
  23. {
  24. this._label = base.GetComponent<UILabel>();
  25. }
  26. string text = this._label.text;
  27. text = text.Substring(0, text.IndexOf(this._target, StringComparison.Ordinal));
  28. NGUIText.finalSize = this._label.defaultFontSize;
  29. this._label.UpdateNGUIText();
  30. this._printedSize = NGUIText.CalculatePrintedSize(text);
  31. Vector2 pivotOffset = -Vector2.Scale(this._label.pivotOffset - 0.5f * Vector2.one, this._label.printedSize);
  32. float x = pivotOffset.x - this._label.printedSize.x / 2f + this._printedSize.x + NGUIText.CalculatePrintedSize(this._target).x / 2f;
  33. float nOfTarget = this._printedSize.y / (float)this._label.finalFontSize;
  34. float i = this._label.printedSize.y / (float)this._label.finalFontSize;
  35. float y = pivotOffset.y + (i - 2f * nOfTarget + 1f) * (float)this._label.finalFontSize * 0.5f * (i - 1f);
  36. this._sprite.localPosition = new Vector3(x, y, this._sprite.localPosition.z);
  37. yield break;
  38. }
  39. private UILabel _label;
  40. private Vector2 _printedSize;
  41. [SerializeField]
  42. [Header("替换的目标Sprite")]
  43. private Transform _sprite;
  44. [Header("替换的目标字符")]
  45. [SerializeField]
  46. private string _target;
  47. [Header("在使用键盘时是否生效")]
  48. [SerializeField]
  49. private bool _useInKeybordMode;
  50. }