在运行时保存场景并在以后重新加载它的内置方法是不存在的。在Unity构建中,场景以不可编辑的格式存储,这意味着每当您加载一个场景时,它将以与构建时相同的格式加载。这是一件好事,因为您不想在部署的游戏中编辑构建内容。
现在,这并不意味着场景不能包含逻辑以使自身配置不同。实际上,听起来就像是你正在做的事情。目标是将内容存储到保存文件中。
考虑从“我想要加载一个生成随机游戏玩法的场景”转变为“我想要加载一个基于文件配置自己的场景”的思维方式。这是一层抽象,可以更好地控制加载场景时发生的事情。
我建议创建一个JSON配置文件来存储您的重要信息,类似于以下内容:
{
"house_locations": [
{
"position": "(0, 0, 0)",
"objects": []
},
{
"position": "(10, 10, 10)",
"objects": []
}
],
"characters": [
{
"position": "(0, 0, 0)",
"inventory": [
{
"item_name": "knife"
},
{
"item_name": "shovel"
}
]
}
]
}
这只是一个简单的示例,您需要添加重要的数据来表示您的游戏。
接下来,当您想要开始游戏时,您只需要执行以下操作之一:
1. 您是否要开始新游戏?=> 生成随机配置文件,然后使用它来填充场景。
2. 您是否正在加载已保存的游戏?=> 使用保存的配置文件来填充场景。
您需要一些类似于“WorldBuilder”的脚本来处理此操作。在您的场景中,您可以像以下示例一样编写代码:
public class WorldBuilder : MonoBehaviour
{
private string _json = "";
public void BuildWorld(string configFilePath)
{
_json = LoadConfiguration(configFilePath);
BuildWorld(_json);
}
public void GenerateWorld()
{
_json = GenerateConfiguration();
BuildWorld(_json);
}
public void SaveWorld(string targetFilePath)
{
}
private string LoadConfiguration(string configFilePath)
{
}
private void BuildWorld(string json)
{
}
private string GenerateConfiguration()
{
}
}
这种方法将场景内容的保存和生成分开,使得编码更加易写易维护。