暂无描述
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

GameObjectCreation.cs 4.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. using System;
  2. using System.Linq;
  3. using UnityEditor.Presets;
  4. using UnityEditor.SceneManagement;
  5. using UnityEngine;
  6. using UnityEngine.U2D;
  7. namespace UnityEditor.U2D.SpriteShape
  8. {
  9. internal class GameObjectCreation
  10. {
  11. const int k_MenuPriority = 4;
  12. [MenuItem("GameObject/2D Object/Sprite Shape/Open Shape", false, k_MenuPriority)]
  13. static void MenuItem_GameObject2DObjectSpriteShapeOpenShape(MenuCommand menuCommand)
  14. {
  15. var asset = AssetDatabase.LoadAssetAtPath<GameObject>("Packages/com.unity.2d.spriteshape/Editor/ObjectMenuCreation/DefaultAssets/Sprite Shapes/Open Sprite Shape.prefab") as GameObject;
  16. var preset = new PresetType(asset.GetComponent<SpriteShapeController>());
  17. var defaults = Preset.GetDefaultPresetsForType(preset).Count(x => x.enabled);
  18. var go = CreateGameObject("Open Sprite Shape", menuCommand, new []{typeof(SpriteShapeController)});
  19. go.GetComponent<SpriteShapeController>().spline.isOpenEnded = true;
  20. if (defaults == 0)
  21. EditorUtility.CopySerialized(asset.GetComponent<SpriteShapeController>(), go.GetComponent<SpriteShapeController>());
  22. }
  23. [MenuItem("GameObject/2D Object/Sprite Shape/Closed Shape", false, k_MenuPriority)]
  24. static void MenuItem_GameObject2DObjectSpriteShapeClosedShape(MenuCommand menuCommand)
  25. {
  26. var asset = AssetDatabase.LoadAssetAtPath<GameObject>("Packages/com.unity.2d.spriteshape/Editor/ObjectMenuCreation/DefaultAssets/Sprite Shapes/Closed Sprite Shape.prefab") as GameObject;
  27. var preset = new PresetType(asset.GetComponent<SpriteShapeController>());
  28. var defaults = Preset.GetDefaultPresetsForType(preset).Count(x => x.enabled);
  29. var go = CreateGameObject("Closed Sprite Shape", menuCommand, new []{typeof(SpriteShapeController)});
  30. go.GetComponent<SpriteShapeController>().spline.isOpenEnded = false;
  31. if (defaults == 0)
  32. EditorUtility.CopySerialized(asset.GetComponent<SpriteShapeController>(), go.GetComponent<SpriteShapeController>());
  33. }
  34. internal static GameObject CreateGameObject(string name, MenuCommand menuCommand, params Type[] components)
  35. {
  36. var parent = menuCommand.context as GameObject;
  37. var newGO = ObjectFactory.CreateGameObject(name, components);
  38. newGO.name = name;
  39. Selection.activeObject = newGO;
  40. Place(newGO, parent);
  41. Undo.RegisterCreatedObjectUndo(newGO, string.Format("Create {0}", name));
  42. return newGO;
  43. }
  44. internal static void Place(GameObject go, GameObject parentTransform)
  45. {
  46. if (parentTransform != null)
  47. {
  48. var transform = go.transform;
  49. Undo.SetTransformParent(transform, parentTransform.transform, "Reparenting");
  50. transform.localPosition = Vector3.zero;
  51. transform.localRotation = Quaternion.identity;
  52. transform.localScale = Vector3.one;
  53. go.layer = parentTransform.gameObject.layer;
  54. if (parentTransform.GetComponent<RectTransform>())
  55. ObjectFactory.AddComponent<RectTransform>(go);
  56. }
  57. else
  58. {
  59. PlaceGameObjectInFrontOfSceneView(go);
  60. StageUtility.PlaceGameObjectInCurrentStage(go); // may change parent
  61. }
  62. // Only at this point do we know the actual parent of the object and can modify its name accordingly.
  63. GameObjectUtility.EnsureUniqueNameForSibling(go);
  64. Undo.SetCurrentGroupName("Create " + go.name);
  65. Selection.activeGameObject = go;
  66. if (EditorSettings.defaultBehaviorMode == EditorBehaviorMode.Mode2D)
  67. {
  68. var position = go.transform.position;
  69. position.z = 0;
  70. go.transform.position = position;
  71. }
  72. }
  73. internal static void PlaceGameObjectInFrontOfSceneView(GameObject go)
  74. {
  75. var view = SceneView.lastActiveSceneView;
  76. if (view != null)
  77. {
  78. view.MoveToView(go.transform);
  79. }
  80. }
  81. }
  82. }