Найти тему

Паттерн наблюдатель в Unity 3D

В любой игре постоянно что-то происходит. Один персонаж нанес урон дургому, заспавнилась пачка мобов, кто-то нажал паузу, или прозвенел победный гонг. У одной части системы изменилось состояние, а другая произвела какое-то действие. В этой статье мы разберем паттерн – наблюдатель. Разработчики используют его даже не задумываясь, ведь в C# уже есть события. У вас может возникнуть справедливый вопрос, если есть события, то о чем может идти речь, паттерн реализуется средствами языка автоматически, тут есть внушительная доля истины, но все таки нередки ситуации, когда в Update разработчик что-то обновляет, изменяя состояние сущностей. Либо в Coroutine ждет пока произойдет какое-то действие. В этой статье мы рассмотрим реализацию паттерна наблюдатель, несколько вариаций его использования и еще парочку интересных вещей.

Предположим, у нас стоит задача написать модуль обновления конфигурации игры. Геймдизайнер хочет обновлять данные игры с помощью админ панели. Обновлять нужно будет базовые данные и характеристики игрока, такие как набор жизней, урон и скорость. При изменении в админ панели сервер отсылает клиенту сообщение об изменении конфигурации. Клиент обрабатывает его и говорит напрямую игроку, что необходимо обновить свои характеристики. Пока особых проблем нет. Дизайнер радуется конролю над игрой и решает добавить новую конфиграцию управления врагами. Сервер подготавливает библиотеку и вызов, сообщение доходит до ConfigProvider и ему уже нужно обновить систему врагов.