Я создаю систему сохранения / загрузки для игры в Unity, и у меня возникла проблема.
система сохранения в настоящий момент сохраняет все открытые сцены в списке файлов при сохранении.
При загрузке, т.е. после смерти игрока в игре, все сцены загружаются асинхронно из списка, извлекаемого из файла.
Проблема, с которой я сталкиваюсь, заключается в том, что из-за единства, необходимого для загрузки хотя бы одной сцены в любое время, я получаю несколько экземпляров тех сцен, которые уже были загружены. Решение, которое я нашел до сих пор, состоит в том, чтобы поместить все загруженные сцены в список, а затем выгрузить их сразу после загрузки сцен в файле сохранения, но в этом заключается проблема:
Я понятия не имею, как обеспечить выполнение операций выгрузки после операций загрузки.
Я искал в Google только, чтобы найти очень мало результатов по этому вопросу; кроме довольно бесполезной документации единицы, в которой говорится, что асинхронные операции имеют свойство .priority
, но не приводятся примеры того, как изменить его до того, как асинхронный запуск фактически начнет выполняться, только то, что приоритет не действует после его запуска.
https://docs.unity3d.com/ScriptReference/AsyncOperation-priority.html
вот уменьшенная и прокомментированная версия моего кода:
List<AsyncOperation> _asyncs = new list<AsyncOperation>();
List<String> _scenesFromLoadedSaveFile = new List<string>();
//pretend there is something here which gets all the loaded scenes
//and puts them in _listOfAlreadyLoadedScenes. I have that in my real code.
foreach(string _sceneToUnload in _listOfAlreadyLoadedScenes)
{
//this is where i need help.
//how do i set the priority of this before it runs here?
_asyncs.add(SceneManager.UnloadSceneAsync(_sceneToUnload));
}
foreach(string _sceneToLoad in _scenesFromLoadedSaveFile)
{
_asyncs.add(Scenemanager.LoadSceneAsync(_sceneToLoad));
}