NavmeshAddEditor.cs 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. using UnityEngine;
  2. using UnityEditor;
  3. namespace Pathfinding {
  4. [CustomEditor(typeof(NavmeshAdd))]
  5. [CanEditMultipleObjects]
  6. public class NavmeshAddEditor : EditorBase {
  7. protected override void Inspector () {
  8. EditorGUI.BeginChangeCheck();
  9. var type = FindProperty("type");
  10. PropertyField("type", "Shape");
  11. EditorGUI.indentLevel++;
  12. if (!type.hasMultipleDifferentValues) {
  13. switch ((NavmeshAdd.MeshType)type.intValue) {
  14. case NavmeshAdd.MeshType.Rectangle:
  15. PropertyField("rectangleSize");
  16. break;
  17. case NavmeshAdd.MeshType.CustomMesh:
  18. PropertyField("mesh");
  19. PropertyField("meshScale");
  20. break;
  21. }
  22. }
  23. PropertyField("center");
  24. EditorGUI.indentLevel--;
  25. EditorGUILayout.Separator();
  26. PropertyField("updateDistance");
  27. if (PropertyField("useRotationAndScale")) {
  28. EditorGUI.indentLevel++;
  29. FloatField("updateRotationDistance", min: 0f, max: 180f);
  30. EditorGUI.indentLevel--;
  31. }
  32. EditorGUI.BeginChangeCheck();
  33. PropertyField("graphMask", "Traversable Graphs");
  34. bool changedMask = EditorGUI.EndChangeCheck();
  35. serializedObject.ApplyModifiedProperties();
  36. if (EditorGUI.EndChangeCheck()) {
  37. foreach (NavmeshAdd tg in targets) {
  38. tg.RebuildMesh();
  39. tg.ForceUpdate();
  40. // If the mask is changed we disable and then enable the component
  41. // to make sure it is removed from the right graphs and then added back
  42. if (changedMask && tg.enabled) {
  43. tg.enabled = false;
  44. tg.enabled = true;
  45. }
  46. }
  47. }
  48. }
  49. }
  50. }