Как я делаю открытый мир
Хочу поделиться тем как строю систему открытого мира в своей игре (движок Unity).
Поискал разные варианты как строятся открытые миры. Варианты на которое я засматривался были:
1) Всё на одной сцене
2) Additive сцены
Далее как я всё это себе представляю.
А) Данный вариант я представляю себе как сцена которая разбита на секторы
Каждый сектор представляет из себя игровой объект у которого в дочерних визуал сектора, npc, триггер зоны и тд.
У каждого сектора есть точка входа и выхода. Когда мы заходим из сектора А в сектор В выключаются все сектора и включается сектор В и его соседние сектора. В примере на картинке соседние сектора В это А и С
В) Аддитивные сцены работают так же как и сектора на одной сцене. Но вместо того чтобы всё это было на одной сцене сектора представляют из себя отдельные сцены. Есть главная сцена, на ней грузится всё основное. После этого подгружается необходимая сцена. Переходя между секторами игрок по сути меняет сцену.
Что я выбрал
Я решил что мне второго способа не надо потому-что у меня не столь большой открытый мир. Я решил что мир игры будет состоять из двух или трех (может даже одной) больших сцен с секторами.
Через код я это сделал так что
- Есть скрипт запуска важных объектов сцены, то есть - игрок, система звуков, главный объект секторов
- Главный объект секторов. Который хранит в себе инфу какой сектор включаем по умолчанию если зашли в игру первый раз и в целом отвечает за загрузку секторов при запуске сцены
- Скрипт на секторе который хранит инфу где вход и выход и что является соседними секторами
Последовательность их запуска такая как показана выше.
Такой подход я выбрал потому что, по-моему, лучше делать так как ты понимаешь чем пытаться сходить с ума каждый раз изучая что-то. + Удобнее
1) Код запуска объектов на сцене в нужной последовательности
2) Скрипт управляющий загрузкой секторов (или чанков)
3) Скрипт на самом чанке