コード例 #1
0
        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));
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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
            }
        }
コード例 #4
0
        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);
                }
            }
        }