BenjaminBot

Пикабушник
Дата рождения: 01 января 1990
поставил 595 плюсов и 2832 минуса
отредактировал 0 постов
проголосовал за 2 редактирования
Награды:
5 лет на Пикабу
9744 рейтинг 1 подписчик 28 подписок 15 постов 3 в горячем

Система игровых событий

В Unity известен подход ко взаимодействию объектов посредством событий.

Объявляется Action с необходимыми параметрами. Какие-то объекты на него подписываются, кто-то это событие вызывает и все подписчики исполняют методы, которыми подписались на это событие. Такой подход уменьшает связанность объектов, что есть хорошо.

Однако важно подписки вовремя добавлять и убирать, чтобы не происходило утечек памяти или объекты не подписывались на событие несколько раз. Обычно это делают в методах OnEnable и OnDisable. В каждом подписчике нужно рутинно прописывать подписку/отписку и если событий набралось много, то это может вылиться в простыню кода.

Я решил запилить кастомный пакет с решением, которое поможет создавать события через удобный UI и избавит от рутины ручной подписки/отписки на них, что немного облегчит разработку.

Game Events System

Добавляйте необходимые события, выбирайте типы аргументов, группируйте события в логические "каналы" и жмите "Generate".

Система игровых событий Программирование, Gamedev, Unity, Гифка

Сгенерируются классы по каналам со статическими событиями.
Если в качестве аргумента события необходимо указать типы, объявленные в других пакетах в проекте, то включите галочку "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

В пакет добавлена сцена с примерами использования

Буду благодарен за фидбек и идеи улучшения системы.

Показать полностью

Интересный момент в звукопостановке Atomic Heart, или признательность Jeoffrey Day за крутые треки

Прохожу я, значит, Atomic Heart. Забегаю в деревню, там по радио на столбе оригинал "звёздное лето" с Пугачевой играет, а недалеко бегают култыши. Я подхожу к ним "поздороваться", начинается драка и ровно в этот момент оригинал песни заменяется на рок-версию от Jeoffrey Day, причем момент перехода в песне подобрался так грамотно, что меня тут же подхватил этот боевой азарт и я пошел кромсать всех кого вижу, прям как в думе под музыку Мика Гордона.

И вот через несколько дней мне попалось видео того самого музыканта Jeoffrey Day, где он рассказывает, что он специально подвёл оригинальные треки и их ремиксы друг к другу, чтобы их можно было подменить как только начинается драка. Он передал эту идею разработчикам и добавил, что кажется они не успели добавить такую фичу в игру. Сдается мне, в каком-то виде все же добавили, чему я весьма впечатлился когда встретил.

Видео, правда, на английском, но он там рассказывает ещё пару интересных фактов, например что означает название песни PT-1X12, под которую мы эпично рубимся с ежихой.

Музыканту большой респект за такие саундтреки

Показать полностью

Горячее подостыло

@moderator Каким образом пост с рейтингом -6 от новорега попал в горячее, так еще на второй странице?

Горячее подостыло Картинка с текстом, Горячее, Ошибка

Ответ на пост «Пикабу троллит на первое апреля?)»

А вот мне такие рекомендации очень даже нравятся

Ответ на пост «Пикабу троллит на первое апреля?)» Пикабу, 1 апреля, Юмор, Рекомендации, Ответ на пост

Бесконечное

Внимание, СПОЙЛЕРЫ! Кто не хочет отхватить спойлеров (хотя фактически их тут нет), сворачивайте пост и проходите мимо, не задерживайтесь.

Бесконечное CynicMansion, Мстители, Спойлер, Длиннопост, Комиксы
Бесконечное CynicMansion, Мстители, Спойлер, Длиннопост, Комиксы
Бесконечное CynicMansion, Мстители, Спойлер, Длиннопост, Комиксы
Бесконечное CynicMansion, Мстители, Спойлер, Длиннопост, Комиксы

И маленький бонус для тех, кто уже посмотрел

Показать полностью 4

Вышел новый трейлер Мстителей

Подарок от Пикабу на новый год

Подарок от Пикабу на новый год

Дедукция, или индукция?

Увидев в свежем пост об интересных фактах о Шерлоке Холмсе, я все же решился написать об одном из перечисленных там фактах - о "неверном" названии метода мышления гг - о дедукции.

Уже много где я встречал утверждение о том, что Шерлок Холмс использует вовсе не дедукцию, а индукцию. А что такое индукция и дедукция (в логике, конечно)?

Дедукция - получение частного вывода из общего, причем мы должны располагать определенными предпосылками(что очень важно здесь) для вывода. Например:
- Все люди смертны(общее заключение, которое является правдой)
- Вася - человек(частное наблюдение, или предпосылка)
- Вася смертен(вывод, основанный на двух предыдущих утверждениях)

Индукция же противоположна дедукции. То есть мы получаем общее из частного. Например:
Железо, медь, цинк, кадмий, свинец проводят электрический ток(частные наблюдения)
Следовательно, все металлы проводят электрический ток(вывод на основе этих наблюдений).

А как же с Шерлоком? Ведь действительно, наш детектив берет частные детали и собирает из них целую картину, разве не так? А вот и нет. В действительности же у такого опытного следователя, как Шерлок Холмс, в голове огромная картотека на всех преступников, с которыми ему когда либо доводилось сталкиваться. Эта картотека является общей картиной преступников. Замечая какую либо деталь на месте преступления(частное наблюдение), он отсеивает из общей картины те типы преступников, которые не удовлетворяют деталям. Благодаря нескольким таким частным деталям можно получить вполне ограниченный круг подозреваемых. И Конан Дойль, в действительности, не ошибался, а именно подразумевал это, говоря о дедукции. Вот в доказательство фраза из произведения, не раз используемая Шерлоком: "Отбросьте все невозможное, то, что останется, и будет ответом, каким бы невероятным он ни казался".

К тому же, существует парадокс индукции, из-за которого нельзя стопроцентно полагаться на нее. В приведенном мной примере про металлы есть один изъян. В списке частных наблюдений нет ртути, которая так же является металлом, но при этом не проводит ток. Выходит, если бы Шерлок Холмс использовал индукцию, он бы периодически ошибался.

На этом, завершу образовательную минутку, спасибо, что дочитали.

P. S. Я в дискуссии на эту тему отвоевал отл. на зачете у одного замечательного препода, причем предмет был совсем не мат. логикой)
Показать полностью
Отличная работа, все прочитано!