本文地址: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这个函数可以把创建好的对象移动到指定场景中,这算一个通用的办法了,就是还需要多转换一下