我制作了一个脚本,它在场景中的任意位置(在Start()上)生成(实例化)随机游戏对象。但我有两个问题:
dontdestroyonload,它让对象跨越所有场景,从不破坏它们。发布于 2018-03-28 02:26:12
使用PlayerPrefs保存该位置,然后读取它:
//Write
PlayerPrefs.SetFloat("PlayerX", player.transform.position.x);
PlayerPrefs.SetFloat("PlayerY", player.transform.position.y);
PlayerPrefs.SetFloat("PlayerZ", player.transform.position.z)
//Read
var x = PlayerPrefs.GetFloat("PlayerX");
var y = PlayerPrefs.GetFloat("PlayerY");
var z = PlayerPrefs.GetFloat("PlayerZ");
//Apply
Vector3 posVec = new Vector3(x,y,z);
player.transform.position = posVec;发布于 2018-03-28 09:12:34
当你离开现场时,你为什么要保留这些物品?那么,获得一个Unity扩展来生成随机对象不是更容易吗?然后,您可以在任何时候生成对象并将它们保存到场景中。
如果使用Editor扩展,也不必担心Start()。
编辑:基于您的注释,您需要的是一个保存/加载系统,在这个系统中,您在离开场景时存储生成对象的ID和位置,然后在返回场景时加载它。要将运行时场景保存为场景文件是不可能的,因为它被编译到游戏的数据中。
最简单的方法是从资产商店获得一个系统,基于你自称缺乏经验,这可能是你最好的选择。
否则,你就得自己动手了。如何做到这一点在以下问题中得到了回答:保存游戏状态的最佳方法是什么?
总结一下这里的内容:您必须创建一个类,使您能够将数据保存到一个文件中。这可以通过使用统一中的BinaryFormatter来完成。尽管还有更多的选项,比如XML。
发布于 2018-03-28 11:24:46
您可以向类添加一个ExecuteInEditMode属性。如果您不希望在正在加载的场景中执行逻辑--用if(!Application.isPlaying)包围这个逻辑。
话虽如此,但我宁愿做一个编辑器工具,一个检查按钮,一个上下文菜单--在我看来,任何类似的东西都会更好。
https://stackoverflow.com/questions/49524451
复制相似问题