public static bool CanMoveTransformToScene(Transform transform, Scene scene) { if (transform == null) { throw new ArgumentNullException("transform"); } if (!scene.IsValid()) { throw new ArgumentException("The scene is not valid", "scene"); } RefreshSubSceneInfo(); var subSceneInfo = SubSceneGUI.GetSubSceneInfo(scene); if (!subSceneInfo.isValid) { return(true); // scene is a root and is always valid to move into } if (transform == subSceneInfo.transform) { return(false); // cannot move a SubScene's transform parent into itself } return(CanSetNewParent(transform, subSceneInfo.transform)); }
static void CreateEmptyChild(MenuCommand menuCommand) { var parent = menuCommand.context as GameObject; if (parent == null) { var activeGO = Selection.activeGameObject; if (activeGO != null && !EditorUtility.IsPersistent(activeGO)) { parent = activeGO; } } // If selected GameObject is a Sub Scene header, place GameObject in active scene // similar to what happens when other scene headers are selected. SceneHierarchyHooks.SubSceneInfo info = SubSceneGUI.GetSubSceneInfo(parent); if (info.isValid) { parent = null; } var go = ObjectFactory.CreateGameObject("GameObject"); Place(go, parent); }
Transform GetTransformParentForDrop(int gameObjectOrSceneInstanceID, DropPosition dropPosition) { var obj = EditorUtility.InstanceIDToObject(gameObjectOrSceneInstanceID); if (obj != null) { // Find transform parent from GameObject var go = obj as GameObject; if (go == null) { throw new InvalidOperationException("Unexpected UnityEngine.Object type in Hierarchy " + obj.GetType()); } switch (dropPosition) { case DropPosition.Upon: return(go.transform); case DropPosition.Below: case DropPosition.Above: if (go.transform.parent == null) { var subSceneInfo = SubSceneGUI.GetSubSceneInfo(go.scene); if (subSceneInfo.isValid) { return(subSceneInfo.transform); } } return(go.transform.parent); default: throw new InvalidOperationException("Unhandled enum " + dropPosition); } } else { // Find transform parent from Scene var scene = EditorSceneManager.GetSceneByHandle(gameObjectOrSceneInstanceID); var subSceneInfo = SubSceneGUI.GetSubSceneInfo(scene); if (subSceneInfo.isValid) { return(subSceneInfo.transform); } return(null); // root scene has no transform parent } }
void CreateSceneHeaderItems() { m_StickySceneHeaderItems.Clear(); int numScenesInHierarchy = EditorSceneManager.sceneCount; if (SubSceneGUI.IsUsingSubScenes()) { for (int i = 0; i < numScenesInHierarchy; ++i) { Scene scene = SceneManager.GetSceneAt(i); var subSceneInfo = SubSceneGUI.GetSubSceneInfo(scene); if (subSceneInfo.isValid) { var item = new GameObjectTreeViewItem(0, 0, null, null); var transform = subSceneInfo.transform; GameObject gameObject = transform.gameObject; int depth = SubSceneGUI.CalculateHierarchyDepthOfSubScene(subSceneInfo); InitTreeViewItem(item, gameObject.GetInstanceID(), subSceneInfo.scene, false, 0, gameObject, false, depth); m_StickySceneHeaderItems.Add(item); } else { var item = new GameObjectTreeViewItem(0, 0, null, null); InitTreeViewItem(item, scene.handle, scene, true, 0, null, false, 0); m_StickySceneHeaderItems.Add(item); } } } else { for (int i = 0; i < numScenesInHierarchy; ++i) { Scene scene = SceneManager.GetSceneAt(i); var item = new GameObjectTreeViewItem(0, 0, null, null); InitTreeViewItem(item, scene.handle, scene, true, 0, null, false, 0); m_StickySceneHeaderItems.Add(item); } } }