Unity3d 统一保存和加载整个场景
好吧,我已经努力搜索了一段时间,看到了很多不同的帖子,但我没有找到我问题的答案 我的问题是: 我有一个统一的场景,里面什么都没有,一切都是在游戏开始时按程序随机创建的,当然我希望玩家能够保存他的进度。我找到了在Unity中保存进度的方法,但一切都是关于为我想要保存的每个类或对象编写脚本,但在我看来这些方法效率低下,因为在我的游戏中,有随机生成的房屋和建筑物(这相对容易保存),但也可以在这些建筑物内放置对象等等。稍后我还计划添加字符,这些字符也需要保存(比如它们在哪里,它们持有什么等等)。正如我所提到的,为每个对象编写保存和加载脚本对我来说似乎效率很低,因为我已经习惯了Java的serializtaion,我只是将包含所有数据的主对象写入一个文件,所以我正在寻找一些更简单的方法。可能是一种保存整个场景状态的方法,然后在加载时只加载场景,而不是从头开始生成场景 我的问题: 有没有办法保存整个场景中的所有对象及其相关信息,然后加载Unity3d 统一保存和加载整个场景,unity3d,serialization,save,load,Unity3d,Serialization,Save,Load,好吧,我已经努力搜索了一段时间,看到了很多不同的帖子,但我没有找到我问题的答案 我的问题是: 我有一个统一的场景,里面什么都没有,一切都是在游戏开始时按程序随机创建的,当然我希望玩家能够保存他的进度。我找到了在Unity中保存进度的方法,但一切都是关于为我想要保存的每个类或对象编写脚本,但在我看来这些方法效率低下,因为在我的游戏中,有随机生成的房屋和建筑物(这相对容易保存),但也可以在这些建筑物内放置对象等等。稍后我还计划添加字符,这些字符也需要保存(比如它们在哪里,它们持有什么等等)。正如我所
提前谢谢你 我不知道如何构建场景或原则。 但有一个插件可以在播放模式下保存场景,您可以根据您的项目进行配置
没有内置方法可以在运行时“保存场景”,然后在以后重新加载。在Unity构建中,场景以不可编辑的格式存储,这意味着无论何时加载场景,它都将以与构建时相同的格式加载。这是一件好事,因为你不想在部署的游戏中编辑你的构建内容 现在,这并不意味着场景不能包含不同配置自身的逻辑。事实上,听起来你就是这么做的。相反,目标是将内容存储到保存文件中 考虑将您的心态从“我想加载一个生成随机游戏性的场景”转换为“我想加载一个基于文件进行自我配置的场景”。这是一个抽象层,可以更好地控制加载场景时发生的事情 我建议创建一个JSON配置文件来存储您的重要信息,如下所示:
{
“房屋位置”:[
{
“位置”:“(0,0,0)”,
“对象”:[]
},
{
“位置”:“(10,10,10)”,
“对象”:[]
}
],
“字符”:[
{
“位置”:“(0,0,0)”,
“库存”:[
{
“项目名称”:“刀”
},
{
“项目名称”:“电铲”
}
]
}
]
}
这只是一个简单的例子,因为您必须添加表示游戏的重要数据
接下来,当你想开始游戏时,你所要做的就是做以下事情之一:
WorldBuilder
脚本来处理此问题。在场景中,可以有如下内容:
公共类WorldBuilder:MonoBehavior
{
//这是世界的实际内容,用JSON字符串表示。
私有字符串_json=“”;
公共void BuildWorld(字符串configFilePath)
{
_json=LoadConfiguration(configFilePath);
BuildWorld(json);
}
公共void GenerateWorld()
{
_json=GenerateConfiguration();
BuildWorld(json);
}
public void SaveWorld(字符串targetFilePath)
{
//将_json的内容保存到一个文件中,以便加载它
//过一会儿再起床。
}
私有字符串加载配置(字符串配置文件路径)
{
//加载实际文件并返回文件内容,即JSON字符串。
}
私有void BuildWorld(字符串json)
{
//实际使用提供的JSON构建世界。
}
私有字符串GenerateConfiguration()
{
//返回随机生成的配置文件。
}
}
这种方法将保存场景内容和生成场景内容的问题分离开来,使代码更易于编写和维护。好吧,这不是我要寻找的,我要寻找的是一种保存播放器进度的方法,而不是我在编辑栏中所做的更改,这正是我不想做的:P,但我想我没有别的选择了choice@Coreggon你不想采用这种方法的原因是什么?因为我有很多对象,我不想为每个要保存的对象编写代码