Unity在非激活场景中创建GameObject

本文地址:https://blog.csdn.net/t163361/article/details/105234184
直接通过 var go = new GameObject(); 这样的方式创建的物体都会创建在已经激活的场景里面
如果想直接在一个特定场景创建的话,可以使用
EditorSceneManager.SetTargetSceneForNewGameObjects()
这个方法
创建之前通过设置对应的场景id,创建完成后,记得要重新设置为0
官方SceneHierarchy.cs中有两个私有函数就是实现相应功能的

        void BeforeCreateGameObjectMenuItemWasExecuted(string menuPath, UnityEngine.Object[] contextObjects, int userData)
        {
            int sceneHandle = userData;
            EditorSceneManager.SetTargetSceneForNewGameObjects(sceneHandle);
        }

        void AfterCreateGameObjectMenuItemWasExecuted(string menuPath, UnityEngine.Object[] contextObjects, int userData)
        {
            EditorSceneManager.SetTargetSceneForNewGameObjects(kInvalidSceneHandle);

            // Ensure framing when creating game objects even if we are locked
            if (isLocked)
                m_FrameOnSelectionSync = true;
        }

先调用BeforeCreateGameObjectMenuItemWasExecuted
对象创建完成后调用
AfterCreateGameObjectMenuItemWasExecuted

不过上面的函数都是private或者内部的,需要自己反射调用

上面函数只能在编辑器中用

MoveGameObjectToScene这个函数可以把创建好的对象移动到指定场景中,这算一个通用的办法了,就是还需要多转换一下

猜你喜欢

转载自blog.csdn.net/t163361/article/details/105234184