Система игровых событий
В Unity известен подход ко взаимодействию объектов посредством событий.
Объявляется Action с необходимыми параметрами. Какие-то объекты на него подписываются, кто-то это событие вызывает и все подписчики исполняют методы, которыми подписались на это событие. Такой подход уменьшает связанность объектов, что есть хорошо.
Однако важно подписки вовремя добавлять и убирать, чтобы не происходило утечек памяти или объекты не подписывались на событие несколько раз. Обычно это делают в методах OnEnable и OnDisable. В каждом подписчике нужно рутинно прописывать подписку/отписку и если событий набралось много, то это может вылиться в простыню кода.
Я решил запилить кастомный пакет с решением, которое поможет создавать события через удобный UI и избавит от рутины ручной подписки/отписки на них, что немного облегчит разработку.
Game Events System
Добавляйте необходимые события, выбирайте типы аргументов, группируйте события в логические "каналы" и жмите "Generate".
Сгенерируются классы по каналам со статическими событиями.
Если в качестве аргумента события необходимо указать типы, объявленные в других пакетах в проекте, то включите галочку "Include packages".
Использование
Вызов событий происходит обычным способом:
MenuChannel.OnPause?.Invoke();
Чтобы подписаться на событие, нужно добавить соответствующий атрибут к колбек-методу:
[MenuChannel.OnPause]
public void Pause()
{
// Event handling logic here
Time.timeScale = 0;
// ...
}
Вот и все, вся остальная логика по подписке/отписке сделана за вас.
Ссылка на репозиторий с пакетом:
https://github.com/IRKhabibullin/com.jarmallnick.gameeventss...
Чтобы добавить пакет к проекту нужно:
1) Скопировать ссылку на проект
2) В Unity зайти в Window -> Package Manager
3) Нажать на + и выбрать загрузку по git url
В пакет добавлена сцена с примерами использования
Буду благодарен за фидбек и идеи улучшения системы.
Unity
231 пост2.7K подписчика
Правила сообщества
• Запрещается постить вопросы, мемы и прочую ерунду - для этого есть форумы и другие специализированные ресурсы.
• Распространение и обсуждение пиратского ПО, кейгенов, ключей и прочих пиратских файлов запрещено.
• Соблюдайте сетевой этикет. Оскорбительное поведение и мат (в том числе сокращенный или завуалированный) караются баном.
• Запрещается разводить полемики на тему "какой движок круче". Здесь мы обсуждаем только Unity.
• Запрещается использовать контент с оскорбительным содержанием, а так же любой другой, который может задеть или оскорбить чувства участников.