Ого, еще ж не новый год, чем заслужили такой подарок Спасибо большое
@insanevirtuality2 ай бұрын
Блин, так-то прикольная тема. Я в годо однажды пытался архитектурно сделать боёвку Darkest Dungeon. Но я подошёл иначе, использую Command и Memento через MVC. У меня были Command, которые игроки или AI могли отправлять в Controller, в результате чего создавались CombatEvent'ы, которые уже как-то изменяли модель. Прикол в том, что Command можно передавать по сети (мультиплеер (нет)) и все CombatEvent и Command имеют undo() и redo(), что позволяет туда-сюда возвращаться по ходам и в целом делать реплеи игр. Все ивенты захватывались вьюхой и она уже решала, как что рендерить -- так называемое бутылочное горлышко. Что я в итоге получил хотя и работало, но мне не понравилось. Я уверен, что можно сделать лучше, но пока имею что имею.
@Lucio11a2 ай бұрын
Согласен, Юнитаски огонь. Долго время писал на корутинах (собственно и сейчас изредка их использую в чужих проектах, где по какой-то причине нет юнитаска). Но для себя, по большей части перешел, именно на юнитаск. Очень удобно и не надо насиловать апдейт))
@dmytromahas9207Ай бұрын
Согласен, юни-таски меньше нагружают железо плюс запустить их можно с любого класа а не только монобеха как это с корутинами
@boost_456Ай бұрын
@@dmytromahas9207 единственный минус тасок: долго доходит понимание, как работают токены отмены и как правильно их юзать
@f0kes322 ай бұрын
рефлексия это плохо. магия это плохо. все должно быть explicit. ну, как мне кажется, может вы меня переубедите?
@717pixels92 ай бұрын
Мне как разработчику с низким уровнем программирования это очень интересно, хотя и не понятно. Вот в этом примере с камерой, отлично, можно запустить код из любого места. А как потом определить, кто там вертит камерой, когда через месяц понадобится это отключить? Моя интуиция начинающего разработчика говорит, что нужно сделать отдельный скрипт CameraRotator и прицепить к камере, тогда его легко можно найти либо поиском, либо в самом проекте.
@xkoster_vods2 ай бұрын
ctrl-shift-f поиск Camera.main / G.camera и смотришь кто ее трогает, или смотришь все обработчики OnStartLevel или куда там был помещен код с камерой 😁 Архитектура игры это не про то чтобы делать код который невозможно физически написать так чтобы он выстрелил в ногу, это про то чтобы сделать это было сложней, найти источник проблемы было проще, и сайд эффекты изменений были ограниченны.
@alfarabius2 ай бұрын
Предположу, что скрипт с камерой должен лежать в папке Scripts/Camera/OnEncounterReady
@717pixels92 ай бұрын
@@alfarabius Да, но имхо не так важно, где лежит, главное что искать его я начал бы ткнув на камеру и посмотрев, что к ней прицеплено.
@alfarabius2 ай бұрын
@@717pixels9 Я к тому, что хранить скрипт в определенной папке, это настолько же простая концепция как и крепить монобехи к объектам.
@717pixels92 ай бұрын
@@xkoster_vods Да, можно было бы поиском, но где-то камера была бы назначенной через публичную переменную (вроде Camera.main не очень быстро работает), где-то в названии переменной была бы описка, типа cmarea вместо camera. И в любом случае поиск выдал бы кучу всякого мусора. Просто у меня большая часть времени уходит на то, чтобы найти нужную часть кода, и я пытаюсь в первую очередь сократить это время поиска, сделав все наглядным. Наверное в вашем подходе больше плюсов и я попытаюсь получше разобраться в теме. Вообще делайте пожалуйста больше роликов по программированию.
@lisoferma2 ай бұрын
Не думал, что вместо прописывания каждого класса ручками, можно применить рефлексию, прикольно
@moleskin99552 ай бұрын
Ни-че-го не понимаю! ) Ну, радует хотя бы то, что мне сейчас не прям что страшно "не понимать". Всё равно всё приходит с теорией и практикой личной )
@lev4312 ай бұрын
О вернулся
@ilyamurashko45902 ай бұрын
А есть что-то вроде Di ?)
@moranyt82992 ай бұрын
а я все понял =)
@moranyt82992 ай бұрын
вот только момент с драгом карты. Когда я делал свою карточную игру, я не так понял твою архитектуру и по сути просто сделал карты в виде набора компонентов. Так вот, почему драг карты отдельно во вьюхе?
@xkoster_vods2 ай бұрын
Драг карты был «исключен» из той системы потому что ему не требовалась какая-то архитектура или системность, это просто инпут метод
@Kot-Alenya2 ай бұрын
Лучше создавать интеракции ручками: проще читать код(все интеракции будут списком, друг за дружкой), отпадёт необходимость в приоритетах(и в геморе, связанном с их настройкой).
@Diyozen2 ай бұрын
а не было необходимости запускать несколько интеракций параллельно? Как такие вопросы удаётся решать?
@xkoster_vods2 ай бұрын
В таком случае я запускаю несколько корутин и жду завершения их всех (если надо)
@Diyozen2 ай бұрын
@xkoster_vods понял, спасибо. Идея интересная, надо будет как-нибудь попробовать.