我有玩家实例化大量预制件的场景,我需要它们持续存在。我可以使用EditorSceneManager.SaveScene
来执行此操作吗?或者这完全错了?
如果没有,有类似的东西吗?我需要一种方法来保存场景中的实例化预制件。
答案 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;
}
保存预制件。