Нет встроенного метода, с помощью которого вы можете «сохранить сцену» во время выполнения, а затем перезагрузить ее позже. В сборке Unity сцены хранятся в нередактируемом формате, что означает, что при загрузке сцены она загружается в том же формате, в котором была построена. Это хорошо , потому что вы не хотите редактировать содержимое вашей сборки в развернутой игре.
Это не означает, что сцена не может содержать logi c чтобы настроить себя по-другому. На самом деле, это звучит так, как будто ты это делаешь. Вместо этого цель состоит в том, чтобы сохранить содержимое в файле сохранения.
Попробуйте переключить свой менталитет с «Я хочу загрузить сцену, которая генерирует случайный игровой процесс» на «Я хочу загрузить сцену, которая настраивается на основе файл." Это уровень абстракции, который дает больший контроль над тем, что происходит при загрузке вашей сцены.
Я бы предложил создать файл конфигурации 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"
}
]
}
]
}
Это простой пример, так как вам нужно будет добавить важные данные, которые вы хотите представить в своей игре.
Далее все, что вам нужно сделать, когда вы хотите начать игру это сделать одну из следующих вещей:
- Вы начинаете новую игру? => Создайте случайный файл конфигурации, а затем используйте его для заполнения своей сцены.
- Загружаете ли вы сохраненную игру? => Используйте сохраненный файл конфигурации для заполнения вашей сцены.
Вам понадобится какой-то сценарий WorldBuilder
, чтобы справиться с этим. В вашей сцене может быть что-то вроде следующего:
public class WorldBuilder : MonoBehaviour
{
// This is the actual contents of the world, represented as a JSON string.
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)
{
// Save the contents of _json out to a file so that it can be loaded
// up again later.
}
private string LoadConfiguration(string configFilePath)
{
// Load the actual file and return the file contents, which is a JSON string.
}
private void BuildWorld(string json)
{
// Actually build the world using the supplied JSON.
}
private string GenerateConfiguration()
{
// Return a randomly generated configuration file.
}
}
Этот подход разделяет проблему сохранения содержимого сцены и генерации содержимого сцены, делая код проще для написания и обслуживания.