在运行时使用`EditorSceneManager.SaveScene`

时间:2016-07-23 06:32:35

标签: c# unity3d

我有玩家实例化大量预制件的场景,我需要它们持续存在。我可以使用EditorSceneManager.SaveScene来执行此操作吗?或者这完全错了?

如果没有,有类似的东西吗?我需要一种方法来保存场景中的实例化预制件。

2 个答案:

答案 0 :(得分:1)

  

我可以使用EditorSceneManager.SaveScene来执行此操作吗?

  

如果没有,有类似的东西吗?

在游戏过程中没有内置函数来保存实例化对象。你必须自己实现这个,因为这样做的代码会很大而且有点复杂。

您需要为此编写Editor扩展插件。实例化Object时,将GameObject保存到List中,并附上对象的类型,位置,旋转,颜色以及附加到该GameObject的组件等信息。

当按下停止时,使用Editor模式和List通过循环List重新实例化这些游戏对象。

检测场景播放和停止:

void Start()
{
    EditorApplication.playmodeStateChanged = OnPlayModeEnter;
}


void OnPlayModeEnter()
{
    if (EditorApplication.isPlayingOrWillChangePlaymode)
    {
        Debug.Log("Playing!");
    }else{
         Debug.Log("Stopped Playing!");
    }
}

你做其余的事情!

答案 1 :(得分:0)

2018年2月仍然不可能。

我的解决方法是使用#include <vector> using std::vector; #include <memory> using std::shared_ptr; #include <algorithm> using std::remove; class A { public: A(int age) { age_ = age; } int age_ = 0; int alive_ = 1; }; int main() { shared_ptr<A> a0(new A(0)); shared_ptr<A> a1(new A(1)); shared_ptr<A> a2(new A(2)); vector< shared_ptr <A> > v; v.push_back(a0); v.insert(v.end(), a1); v.insert(v.end(), a2); for (auto el_it = v.begin(); el_it != v.end(); ++ el_it) { auto el = *el_it; if (el->age_ == 2) { v.erase(el_it); } /* if (el_it == v.end()) // Why is this required ?? break; */ } return 0; } 保存预制件。