Nav apraksta
Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

GameObjectCreation.cs 4.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  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. 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. if(defaults == 0)
  19. CreateGameObjectFromTemplate(asset, menuCommand);
  20. else
  21. {
  22. var go = CreateGameObject("Open Sprite Shape", menuCommand, new []{typeof(SpriteShapeController)});
  23. go.GetComponent<SpriteShapeController>().spline.isOpenEnded = true;
  24. }
  25. }
  26. [MenuItem("GameObject/2D Object/Sprite Shape/Closed Shape", false, k_MenuPriority)]
  27. static void MenuItem_GameObject2DObjectSpriteShapeClosedShape(MenuCommand menuCommand)
  28. {
  29. var asset = AssetDatabase.LoadAssetAtPath<GameObject>("Packages/com.unity.2d.spriteshape/Editor/ObjectMenuCreation/DefaultAssets/Sprite Shapes/Closed Sprite Shape.prefab") as GameObject;
  30. var preset = new PresetType(asset.GetComponent<SpriteShapeController>());
  31. var defaults = Preset.GetDefaultPresetsForType(preset).Count(x => x.enabled);
  32. if(defaults == 0)
  33. CreateGameObjectFromTemplate(asset, menuCommand);
  34. else
  35. {
  36. var go = CreateGameObject("Closed Sprite Shape", menuCommand, new []{typeof(SpriteShapeController)});
  37. go.GetComponent<SpriteShapeController>().spline.isOpenEnded = false;
  38. }
  39. }
  40. static public GameObject CreateGameObjectFromTemplate(GameObject template, MenuCommand menuCommand)
  41. {
  42. var parent = menuCommand.context as GameObject;
  43. var fileName = System.IO.Path.GetFileNameWithoutExtension(AssetDatabase.GetAssetPath(template));
  44. var newGO = GameObject.Instantiate(template);
  45. newGO.name = fileName;
  46. Selection.activeObject = newGO;
  47. Place(newGO, parent);
  48. Undo.RegisterCreatedObjectUndo(newGO, string.Format("Create {0}", fileName));
  49. return newGO;
  50. }
  51. static public GameObject CreateGameObject(string name, MenuCommand menuCommand, params Type[] components)
  52. {
  53. var parent = menuCommand.context as GameObject;
  54. var newGO = ObjectFactory.CreateGameObject(name, components);
  55. newGO.name = name;
  56. Selection.activeObject = newGO;
  57. Place(newGO, parent);
  58. Undo.RegisterCreatedObjectUndo(newGO, string.Format("Create {0}", name));
  59. return newGO;
  60. }
  61. internal static void Place(GameObject go, GameObject parentTransform)
  62. {
  63. if (parentTransform != null)
  64. {
  65. var transform = go.transform;
  66. Undo.SetTransformParent(transform, parentTransform.transform, "Reparenting");
  67. transform.localPosition = Vector3.zero;
  68. transform.localRotation = Quaternion.identity;
  69. transform.localScale = Vector3.one;
  70. go.layer = parentTransform.gameObject.layer;
  71. if (parentTransform.GetComponent<RectTransform>())
  72. ObjectFactory.AddComponent<RectTransform>(go);
  73. }
  74. else
  75. {
  76. PlaceGameObjectInFrontOfSceneView(go);
  77. StageUtility.PlaceGameObjectInCurrentStage(go); // may change parent
  78. }
  79. // Only at this point do we know the actual parent of the object and can modify its name accordingly.
  80. GameObjectUtility.EnsureUniqueNameForSibling(go);
  81. Undo.SetCurrentGroupName("Create " + go.name);
  82. Selection.activeGameObject = go;
  83. if (EditorSettings.defaultBehaviorMode == EditorBehaviorMode.Mode2D)
  84. {
  85. var position = go.transform.position;
  86. position.z = 0;
  87. go.transform.position = position;
  88. }
  89. }
  90. internal static void PlaceGameObjectInFrontOfSceneView(GameObject go)
  91. {
  92. var view = SceneView.lastActiveSceneView;
  93. if (view != null)
  94. {
  95. view.MoveToView(go.transform);
  96. }
  97. }
  98. }
  99. }