Инструментарий для передачи данных между сценами. Он предоставляет строго-типизированные обёртки для Unity сцен через которые можно комфортно загружать сцены и передавать им данные для работы.
Пакет представляет из себя плагин для Unity с открытым исходным кодом. Вам нужно перенести папку Plugins из репозитория в свой Unity проект.
После установки у вас может появится ошибка о том, что наш пакет не может обнаружить System.CodeDom. Чтобы это исправить вам нужно изменить версию .Net для проекта, по умолчанию стоит 2.0, вам нужно выбрать 4.0.
После этого всё готово к работе.
Пакет самостоятельно генерирует классы-обёртки над сценами в Unity. Вам достаточно добавить сцену в проект и всё произойдёт само. Если в вашем проекте уже есть сцены то их достаточно реимпортировать.
Теперь вы можете запускать сцены через сгенерированные классы.
using UnityEngine;
using IJunior.TypedScenes;
public class Menu : MonoBehaviour
{
private void OnPlayButtonClick()
{
Game.Load();
}
}
Основная идея этого компонента в том, что у сцены может быть некоторая модель для загрузки\отображения и что бы запустить сцену нужно ОБЯЗАТЕЛЬНО передать объект в корректном состояние.
Во-первых вам нужно задать точку входа в сцене, т.е некоторые код который будет обрабатывать её загрузку.
using IJunior.TypedScenes;
using UnityEngine;
public class StringHandler : MonoBehaviour, ISceneLoadHandler<string>
{
public void OnSceneLoaded(string argument)
{
Debug.Log(argument);
}
}
Для этого вам нужно создать любой компонент реализующий интерфейс ISceneLoadHandler. В качестве T вы указываете те данные которые нужны сцене для запуска. Наш инструмент сам добавить необходимый метод Load в класс сцены который будет принимать в качестве аргумента подходящие данные. После добавления указанного компонента на сцену Game, в класс-сцены появится метод Load(string argument) После его вызова запустится сцена Game а у всех компонентов которые реализуют ISceneLoadHandler вызовется метод OnSceneLoaded.
using UnityEngine;
using IJunior.TypedScenes;
public class Menu : MonoBehaviour
{
private void OnPlayButtonClick()
{
Game.Load("Room Name");
}
}