Unity3d 识别unity游戏对象(运行前)以保存/加载其数据

Unity3d 识别unity游戏对象(运行前)以保存/加载其数据,unity3d,Unity3d,我几乎已经为Android做了一个小的探索游戏,我只是刚刚想到我必须保存玩家的进度 我有很多交互式游戏对象(它们共享我制作的脚本InteractiveObject),它有一个整数“CurrentPosition”参数,跟踪玩家如何与之交互。我需要为所有这些游戏对象保存该参数 我想我要做的是在每次交互之后将这些数据传递给某个“管理器”单例类,并将其编译到列表中。。只是我没有任何东西可以识别那些游戏对象。GetInstanceID是唯一的,但不是持久性的,因此对于这个目的它是无用的 当然,我可以在脚

我几乎已经为Android做了一个小的探索游戏,我只是刚刚想到我必须保存玩家的进度

我有很多交互式游戏对象(它们共享我制作的脚本InteractiveObject),它有一个整数“CurrentPosition”参数,跟踪玩家如何与之交互。我需要为所有这些游戏对象保存该参数

我想我要做的是在每次交互之后将这些数据传递给某个“管理器”单例类,并将其编译到列表中。。只是我没有任何东西可以识别那些游戏对象。GetInstanceID是唯一的,但不是持久性的,因此对于这个目的它是无用的

当然,我可以在脚本中添加“ID”参数,并在编辑器中手动填充。。但这似乎是一个次优的解决方案。有很多这样的物体


有什么建议吗?

您可以使用playerprefs保存游戏数据,查看此链接

您需要以某种方式“注册”按钮 这基本上与“手动给他们一个ID”相同,只是手动替换为“使用代码”

您遇到的第一个问题是,所有按钮都是手动放置在场景中的,它们的所有交互都是手动完成的,所有这些都是手动完成的,而不考虑“我以后需要能够识别这些按钮”,这就是您在这里结束的原因

备选案文1: 让代码创建、放置和命名按钮。由于您的代码是您的,它将自动生成所需的ID并从保存文件中检索状态,因为您构建它是为了从一开始就处理此需求

由于您尚未以这种方式设置项目,因此需要花费大量的工作来重构您的项目

备选案文2: 按你说的你不想做的手工做。您可能必须确定这是工作强度最低的解决方案,也是可靠的

备选案文3: 创建一个类,它所做的只是拥有一个
registerButton
函数,该函数将按钮推入一个数组中,以便它们具有一个索引
ID
值。当您的按钮运行其
Start()
方法(如果它们还没有单行为脚本,请为此给它们一个)时,调用此
registerButton
方法,该方法返回一个ID(它实际上只是
所有按钮
数组中的按钮索引)。将其用作序列化ID


请注意,虽然这是确定性的(因为按钮每次都会以相同的顺序注册),但它是以未知的顺序发生的。如果在场景层次结构中删除、克隆、创建或移动按钮,将影响按钮的ID,可能会使任何现有保存文件无效。

否,实际上保存数据没有问题。问题是:在我的场景中,有50个名为“Button”的对象,例如,每个按钮都有带有参数“Position”的脚本,0表示未按下,1表示按下。问题是,如果我想将这些按钮保存在一个文件中,如何区分它们?正如我上面所说的,只是手工给它们唯一的标识符,比如“button_1”和“button_2”等,这是可编程的,但确实是一个糟糕的决定。它们有单一行为,但我认为Start()不能保证每次都以相同的顺序调用。我应该研究一下,现在我觉得自己很傻。