首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使实例化对象永久化并使游戏对象..。在统一中永远消失

使实例化对象永久化并使游戏对象..。在统一中永远消失
EN

Stack Overflow用户
提问于 2018-03-28 00:50:58
回答 5查看 2.4K关注 0票数 0

我制作了一个脚本,它在场景中的任意位置(在Start()上)生成(实例化)随机游戏对象。但我有两个问题:

  1. 如果我改变场景,然后回来,实例化的对象就不再存在了,也就是说,它们不是永久的。如何使它们像我通过统一编辑器放置在场景中的那些物体一样永久化?我说的不是dontdestroyonload,它让对象跨越所有场景,从不破坏它们。
  2. 我的派生脚本(我只想在第一次加载场景时运行一次)每次我进入场景时都会运行,即使我在脚本中添加了一行破坏脚本和父游戏对象的行。我想让它跑一次,然后永远消失。一个人是怎么做到的?
EN

回答 5

Stack Overflow用户

发布于 2018-03-28 02:26:12

使用PlayerPrefs保存该位置,然后读取它:

代码语言:javascript
复制
//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;
票数 0
EN

Stack Overflow用户

发布于 2018-03-28 09:12:34

当你离开现场时,你为什么要保留这些物品?那么,获得一个Unity扩展来生成随机对象不是更容易吗?然后,您可以在任何时候生成对象并将它们保存到场景中。

如果使用Editor扩展,也不必担心Start()。

编辑:基于您的注释,您需要的是一个保存/加载系统,在这个系统中,您在离开场景时存储生成对象的ID和位置,然后在返回场景时加载它。要将运行时场景保存为场景文件是不可能的,因为它被编译到游戏的数据中。

最简单的方法是从资产商店获得一个系统,基于你自称缺乏经验,这可能是你最好的选择。

否则,你就得自己动手了。如何做到这一点在以下问题中得到了回答:保存游戏状态的最佳方法是什么?

总结一下这里的内容:您必须创建一个类,使您能够将数据保存到一个文件中。这可以通过使用统一中的BinaryFormatter来完成。尽管还有更多的选项,比如XML。

票数 0
EN

Stack Overflow用户

发布于 2018-03-28 11:24:46

您可以向类添加一个ExecuteInEditMode属性。如果您不希望在正在加载的场景中执行逻辑--用if(!Application.isPlaying)包围这个逻辑。

话虽如此,但我宁愿做一个编辑器工具,一个检查按钮,一个上下文菜单--在我看来,任何类似的东西都会更好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49524451

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档