DamageNumberSpriteEditor.cs 3.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. #if UNITY_EDITOR
  2. using UnityEngine;
  3. using UnityEditor;
  4. namespace DamageNumbersPro
  5. {
  6. [CustomEditor(typeof(DamageNumberSprite), true), CanEditMultipleObjects]
  7. public class DamageNumberSpriteEditor : Editor
  8. {
  9. public override void OnInspectorGUI()
  10. {
  11. base.OnInspectorGUI();
  12. Color previousColor = GUI.color;
  13. GUIStyle descriptionTextStyle = new GUIStyle(GUI.skin.label);
  14. descriptionTextStyle.richText = true;
  15. descriptionTextStyle.wordWrap = true;
  16. descriptionTextStyle.stretchHeight = true;
  17. descriptionTextStyle.fixedHeight = 0;
  18. DamageNumberSprite targetSprite = (DamageNumberSprite)target;
  19. DamageNumber damageNumber = targetSprite.GetComponentInParent<DamageNumber>();
  20. foreach (Object target in targets)
  21. {
  22. DamageNumberSprite dnpSprite = (DamageNumberSprite)target;
  23. // Preview size
  24. if (dnpSprite.matchTextSize)
  25. {
  26. SpriteRenderer spriteR = dnpSprite.GetComponent<SpriteRenderer>();
  27. if (spriteR != null)
  28. {
  29. dnpSprite.UpdateSize(dnpSprite.GetComponentInParent<DamageNumber>(), spriteR);
  30. }
  31. RectTransform rectTransform = dnpSprite.GetComponent<RectTransform>();
  32. if (rectTransform != null)
  33. {
  34. dnpSprite.UpdateSize(dnpSprite.GetComponentInParent<DamageNumber>(), rectTransform);
  35. }
  36. }
  37. }
  38. // Check material
  39. SpriteRenderer spriteRenderer = targetSprite.GetComponent<SpriteRenderer>();
  40. if (damageNumber.enable3DGame && spriteRenderer != null && (spriteRenderer.sharedMaterial == null || spriteRenderer.sharedMaterial.shader.name.EndsWith("Overlay") == false))
  41. {
  42. GUI.color = new Color(1, 0.7f, 0.7f, 1);
  43. EditorGUILayout.Space();
  44. EditorGUILayout.BeginVertical("Helpbox");
  45. EditorGUILayout.LabelField("Use the <b>Sprite Overlay</b> material if you want your sprite renderer to render in front of other objects.", descriptionTextStyle);
  46. if(GUILayout.Button("Use Sprite Overlay Material"))
  47. {
  48. string[] guids = AssetDatabase.FindAssets($"t:Material DNP Sprite Overlay");
  49. foreach (string guid in guids)
  50. {
  51. string path = AssetDatabase.GUIDToAssetPath(guid);
  52. Material mat = AssetDatabase.LoadAssetAtPath<Material>(path);
  53. Undo.RecordObject(spriteRenderer, "Changed sprite renderer's material.");
  54. spriteRenderer.sharedMaterial = mat;
  55. break;
  56. }
  57. }
  58. EditorGUILayout.EndVertical();
  59. GUI.color = previousColor;
  60. }
  61. GUI.color = new Color(1f, 1f, 1f, 0.7f);
  62. EditorGUILayout.Space();
  63. EditorGUILayout.BeginVertical("Helpbox");
  64. EditorGUILayout.LabelField("You can attach this component to <b>images</b> and <b>sprite renderes</b> inside your damage number prefab. It will handle <b>fading</b> them in and out with the damage number.", descriptionTextStyle);
  65. EditorGUILayout.Space();
  66. EditorGUILayout.LabelField("<b>Match Text Size</b> will resize the image or sprite renderer to match the text's size. For <b>images</b> it will always resize the <b>rect transform</b>. For <b>sprite renderers</b> it will either resize the <b>transform</b> or if possible the sprite's <b>width</b> and <b>height</b>.", descriptionTextStyle);
  67. EditorGUILayout.EndVertical();
  68. GUI.color = previousColor;
  69. }
  70. }
  71. }
  72. #endif