Тёмный

Рефакторинг c# кода тестового задания. Код ревью unity3D 

Максим Крюков
Подписаться 17 тыс.
Просмотров 20 тыс.
50% 1

Разбираем код еще одного подписчика на c# в рамках тестового задания Junior Unity3D
Ссылка на Discord - / discord
Группа Игроделов - special3d
LINQ в C# - • LINQ в C#. Продвинутое...
Поддержка канала:
Patreon - www.patreon.co...
В крипте:
BTC - 16WmTb4VTFGYrwEjjnMKNNMMzsMB1rPEqD
ETH - 0x8d35406f8317b846528d0a9ea4a34ce59968dff2
XRP - rLW9gnQo7BQhU6igk5keqYnH3TVrCxGRzm (TAG - 1438215071)
LTC- MNSWdzdVsUMnozSU5HhUPEscfxaUK3Fdck
#unity #кодревью #рефакторинг #ityoutubersru

Опубликовано:

 

20 окт 2024

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 101   
@gaitavr1992
@gaitavr1992 3 года назад
Я залил два архива до и после рефакторинга. Их можно найти по этой ссылке - drive.google.com/drive/folders/1Q2r8uHt5toZbUZeZwIDmnh12wTFbrnx5?usp=sharing
@PaulGeraskin
@PaulGeraskin 2 года назад
Спасибо большоее. Может на гитхаб, чтоб не потерялось?
@PavloKenor
@PavloKenor 3 года назад
Даешь народу видео по State Machine и ECS! Лайк однозначно!
@nekitak3472
@nekitak3472 3 года назад
Не пишу на шарпе, но очень интересно послушать про разные архитектурные фичи, однозначно лаек upd с нанесения логического урона на 11:23 проорал
@ИгрушкиИльюшки
@ИгрушкиИльюшки 3 года назад
Привет. Использование библиотеки поиска пути и не использовать коллайдеры это было основным требованием. Пул создавался для хоть какой оптимизации. Ведь время на задание было ограничено. А сделать нужно было много чего. Налепил , как ты и сказал, чтобы выиграть время)
@NERVOUSHACKER
@NERVOUSHACKER 3 года назад
кто от Романа ?
@ЮрийАлексеенко-ж6г
Спасибо, Максим! Вечером буду разбираться и понимать!
@gaitavr1992
@gaitavr1992 3 года назад
Если что, я залил два архива(до и после)
@AlexPlayer1000
@AlexPlayer1000 3 года назад
Наконец то рефакторинг, пожалуйста продолжайте
@OniGameDev
@OniGameDev 3 года назад
Ну тут однозначно лайк+подписка. Буду ждать новых роликов, интересно посмотреть на чужой код и его улучшение. Может и свой проект как нибудь выложу на твоё обозрение)
@НикитаАкула-ш2ч
@НикитаАкула-ш2ч 3 года назад
Привет,жду твоих видосов,как свой День Рождения.Спасибо за твой труд)
@gaitavr1992
@gaitavr1992 3 года назад
Хорошо, что не раз в году)
@vlad9236
@vlad9236 2 года назад
За Эмбиент из Deus Ex: Human Revolution - царский лайк!
@albertshor
@albertshor 3 года назад
Лайк, подписка. Первый раз наткнулся на канал и это именно то, что мне нужно прямо сейчас. Будем учиться на чужих ошибках. Продолжай в том же духе
@inetto84
@inetto84 3 года назад
Как новичок новичку, хочется посоветовать не городить бесконечные вложенные if else, а в написании методов стараться следовать правилу: плюс - минус 10 строк на метод. Бесконечные разветвленные портянки практически не читаемы. Лично я стараюсь по возможности вообще не использовать оператор else, что делает код гораздо понятнее, но это уже дело вкуса, наверное. А автору канала спасибо за познавательное видео.
@gaitavr1992
@gaitavr1992 3 года назад
Совсем else не использовать наверное слишком круто)
@inetto84
@inetto84 3 года назад
Ну, да, так умеют только гуру чипа Линуса:) Но все же в большинстве случаев (как замечено на собственном опыте) else можно заменить на поведение по умолчанию, что делает код более плоским и более читаемым. Хотя, возможно, это накладывает дополнительную нагрузку на машину, что может быть критичным в гемдеве.
@oleksandrbespalov9713
@oleksandrbespalov9713 3 года назад
Разделение методов или классов по таким формальным ограничениям, как 10 строк приведет к лапшекоду, где методы вызывают методы, которые вызывают методы, которые вызывают методы. Дебажить такое это не менее адский процесс. Я думаю формальных ограничений быть не может, если например это метод валидации какого-то состояния по куче правил - там может быть огромное количество строк. Вопрос еще в том, что ни в оригинале, ни в рефакторинге не было замечено ни единого комментария в коде, хотя из того же видео было слышно, что комментировать есть что. Вот это тот момент, который часто упускается. Комментарии невероятно помогают, когда надо въехать что было у другого человека в голове, когда он писал код
@Diyozen
@Diyozen 3 года назад
Как всегда, круто! 12:24 - Думаю, что всё-таки следует раскрывать контракты явно. Передача Entity-создателя может немного смутить. С другой стороны, это расширит "конструктор" до 4-х аргументов, что тоже уже не очень приятно.
@gaitavr1992
@gaitavr1992 3 года назад
Все верно, на самом деле если дать оценку исходному коду, то это 3 из 10. Я сделал из него только 5(максимум). Причины по которой я не делал выше две: 1) Хронометраж видео, нужно делать по этапам или переписывать с нуля( в этом случае половина аудитории не поймет из чего это вышло. 2) Из-за исходного кода, так как я хотел показать тем, кто пишет в таком стиле или часто работает с кодом в таком стиле, как сделать немного лучше и главное понятно
@ИгрушкиИльюшки
@ИгрушкиИльюшки 3 года назад
Отличный обзор. Нужно будет самому посмотреть, и разобраться.
@jonro753
@jonro753 Год назад
Бро, очень крутой видос. Сам учусь игры пилить (закончил учить шарп по курсу Сакутина недавно) и обзор кода - это просто топ при изучении языка, т.к. со стороны как правило видишь кучу ошибок, которые сам допускаешь)) разбор огонь 🔥
@rom4ak_vls
@rom4ak_vls Год назад
Сакутин топ)
@VADIM-SOLOV
@VADIM-SOLOV 3 года назад
Спасибо за видео :)
@behappianstudio3576
@behappianstudio3576 3 года назад
Очень люблю ваши видео! Действительно познавательные, но скучновато) Даже для того человека, который пришёл за знаниями, будет проблематично досмотреть до конца за раз. Но что поделать, "ходите узкими вратами", как говорится) p.s Верю и надеюсь, что никогда не увижу на этом канале "Игра за 30 мин/1час/3часа"
@gaitavr1992
@gaitavr1992 3 года назад
Не увидите)
@oleksandrbespalov9713
@oleksandrbespalov9713 3 года назад
I'm here to help. Settings - Playback speed 1.5x
@behappianstudio3576
@behappianstudio3576 3 года назад
@@oleksandrbespalov9713 данный подход нужен для того, чтобы половину информации мимо ушей пропустить!
@МихаилКрасаков-ж6ю
Спасибо было интересно.
@creep1ch442
@creep1ch442 3 года назад
Сделай видосик по DI (Dependecy Injection) 🥺 пожалуйста
@r3dok201
@r3dok201 2 года назад
Уничтожение объекта это ресурсозатратная операция, проще сделать пул объектов. Выделение и удаление памяти увеличивает кол во вызовов GC, что тоже негативно влияет на производительность. Больше кэша меньше работы с памятью
@AlexStraga
@AlexStraga 3 года назад
Спасибо за ролик, всегда интересно посмотреть рефакторинг. Забавно было бы если автор как пули реализовывал бомбардировщик ) Скидывает бомбы самолет, его сбивает пво и бомбы повисают в воздухе или ваще исчезают ) Хотя как геймплейная фича че бы и да?)
@gaitavr1992
@gaitavr1992 3 года назад
Больше похоже на интерсептеров у кэриера в старкрафте
@AlexStraga
@AlexStraga 3 года назад
@@gaitavr1992 сто лет в СК не играл и ниче не помню. ) еще и во второй части на Крыльях свободы остановился (или как оно там называлось). А вот кстати зиккураты из ВарКрафта 3. Там вполне бы фишка с исчезанием пули подошла после разрушения башни. )
@ИгрушкиИльюшки
@ИгрушкиИльюшки 3 года назад
Пули исчезнули бы)
@finif9192
@finif9192 3 года назад
Комментик для мотивации))
@nomad4994
@nomad4994 3 года назад
Нормальные такие тестовые на джуниора.
@Bug3Funny
@Bug3Funny 3 года назад
я вот тоже думаю, еще пару лет и у джуна уже будет требовать 3 года разработки хотябы на ААА проектах
@justlama0
@justlama0 3 года назад
конкуренция большая
@Bug3Funny
@Bug3Funny 3 года назад
@@justlama0 как и желание платить меньше за большие знания
@gaitavr1992
@gaitavr1992 3 года назад
Ну так всегда происходит. В 2012м году на юнити брали джуном любого с базовым знанием c#
@МихаилКрасаков-ж6ю
Пробовали ли вы ECS unity dots, было интересно услышать ваше мнение о вообще ECS. Насколько удобно и тд.
@gaitavr1992
@gaitavr1992 3 года назад
По job system есть два ролика, скоро будет про ecs, уж больно часто спрашивают. Прийдется сделать)
@МихаилКрасаков-ж6ю
@@gaitavr1992 Еее спасибо, буду ждать с нетерпением.) А вы не пользуетесь ECS для разработки на постоянной основе?
@gaitavr1992
@gaitavr1992 3 года назад
Нет подходящего проекта. Вот в tower defense попробую вставить
@HiiragiKagami
@HiiragiKagami Год назад
Ну тут лайк однозначно, но...Мне одно не понятно: Для чего вот тот Reset() кулдауна атаки, который немного нарушает логику игры. Выходит так, что при смене цели местный воин сбрасывает и остаток времени до след. атаки. Т.е. если он будет окружён толпой врагов и (предположим) его атаки хватит убить врага с удара, то он выпилит эту толпу вокруг себя сразу же как добьёт первого из них.
@kirillsviderski4739
@kirillsviderski4739 3 года назад
Скажу честно, через паузу на курсах рассматривал с подростками видео. Как раз тема актуальна, так как группа находится на стадии написания игр своими руками на минмиальных фреймворках
@gaitavr1992
@gaitavr1992 3 года назад
Надеюсь, было полезно
@DmitryTimofeev_general
@DmitryTimofeev_general 3 года назад
У тебя терпение конечно бездонное в этом всем ковыряться)
@gaitavr1992
@gaitavr1992 3 года назад
Когда увидел енумератор - выпал в осадок на некоторое время)
@DmitryTimofeev_general
@DmitryTimofeev_general 3 года назад
Это была пасхалочка!)))
@ИгрушкиИльюшки
@ИгрушкиИльюшки 3 года назад
А почему? Иенумератор как-то сложно отследить?
@gaitavr1992
@gaitavr1992 3 года назад
@@ИгрушкиИльюшки Это вообще не очевидное решение, почему не брать обычную коллекцию?
@purelame4969
@purelame4969 3 года назад
Максим, а если не секрет, по каким источникам вы обучались программированию на C# + Unity?
@gaitavr1992
@gaitavr1992 3 года назад
Я начинал с C++ по учебнику и статьям, пытаясь пробовать писать консольные игры. Потом мне показали юнити, и я начал читать Шилда по шарпу, а юнити везде где была информация. Реальный рост начался с первой работой в 2013м
@purelame4969
@purelame4969 3 года назад
@@gaitavr1992 Спасибо за быстрый ответ!
@nikitanechaev890
@nikitanechaev890 2 года назад
Куда можно скинуть тестовое на код ревью? У меня в запасе несколько имеется
@ArxPlay
@ArxPlay 2 года назад
А где можно увидеть код автора канала? Чисто им написанный с нуля
@gaitavr1992
@gaitavr1992 2 года назад
Нсть желание сделать код ревью?
@theoctan8569
@theoctan8569 3 года назад
сразу забрасываю удочку на будущее: вопрос по поводу паттерна состояния. Лучше писать свой конечный автомат или пользоваться StateMachineBehaviour? Уверен, что про него тоже стоит хоть немного упомянуть, чтобы знать в каких случаях он лучше, а в каких лучше использовать чистый паттерн состояние.
@gaitavr1992
@gaitavr1992 3 года назад
Не довелось использовать behavior, проверю как оно работает. А вот своих реализаций паттерна достаточно
@oleksandrbespalov9713
@oleksandrbespalov9713 3 года назад
StateMachineBehaviour используется в юнити аниматоре для обработки событий начала/окончания/перехода анимаций. Можно подвязать какое-то действие на окончание анимации (состояния), можно управлять параметрами самого аниматора, например делать случайные переходы, скорость анимации и тд. Но для чего это не вполне подходит - это для чисто логических конечных автоматов, которые не связаны с анимациями. Технически конечно можно реализовать логические стейт машины на основе юнити аниматора, но на мой взгляд это потянет за собой намного больше проблем, чем решений.
@sanded9321
@sanded9321 Год назад
А как производительнее при одинаковом количестве выстрелов делать выстрел пулями или рейкастами? и если потом переносить в мультиплеер правильнее?
@alexspeleers
@alexspeleers 3 года назад
музычка топчег - напоминает Warframe ((:
@gaitavr1992
@gaitavr1992 3 года назад
Это deus ex
@posmacnicolai
@posmacnicolai 3 года назад
Тяжело идет но очень круто!
@ИльяВасильков-п2р
@ИльяВасильков-п2р 3 года назад
Сколько вы занимаетесь разработкой на Юнити?
@gazooc
@gazooc 3 года назад
Пул игроков таки полезен если 6есть какие то особые условия создания игроков. Тем более если игроки не капсулы а что то сложное со скинами то их инициализация будет вызывать неприятный фриз, но если хранить и х в пуле прогрузив заранее то фризов уже не будет, как и лишних выделений памяти под создание игроков, а так же работы у GC по удалению игроков. 2 пула пуль странно, можно у пули хранить данные о фракции, ее стрелка, а при инициализации пули, указывать эту фракцию, либо если игроки запулены то можно и дальше держать на них ссылки прямо в обьекте пули. Менеджер пулов при том сделать универсальный а не заточенный под пули, тот же IPool выполнит задачу.
@gaitavr1992
@gaitavr1992 3 года назад
Никому не нравится ждать лишнее время на старте, если будет сразу создаваться сотня сложных объектов и их инициализация, то оно того не стоит. А пули было принципиально оставить максимально похожим в использовании на старый код
@ve1c0m
@ve1c0m 3 года назад
@@gaitavr1992 можно и не ждать, а асинхронно спавнить в фоне либо корутиной
@gaitavr1992
@gaitavr1992 3 года назад
Можно, и учитывая, что спавнер это отдельный компонент, то можно вынести интерфейс и работать с любой реализацией
@gazooc
@gazooc 3 года назад
@@gaitavr1992 вопрос геймплея. я лучше подожду 5 секунд на старте чем буду терпеть эти 5 секунд в виде микрофризов 20-50 раз в игре пока спавнятся враги. Да в целом считается плохим тоном создавать фризы в играх. и опять же убивать и потом заново создавать сложные обьекты, тоже дурость.
@gaitavr1992
@gaitavr1992 3 года назад
Когда вопрос памяти вытеснит вопрос процессора - пересмотрите свои взгляды
@ivanmayerle1333
@ivanmayerle1333 3 года назад
Hi From Sakutin!
@_EnVyUs
@_EnVyUs 3 года назад
У меня такой вопрос, на сколько быстрее работает и запускается Rider в отличие от Visual studio?
@gaitavr1992
@gaitavr1992 3 года назад
Я их не сравнивал в этом плане. Райдер выбран по причине лучшей интеграции с юнити
@_EnVyUs
@_EnVyUs 3 года назад
@@gaitavr1992 хм, скачал Rider, ну на первый взгляд, он намного быстрее запускается чем студия.
@igorboroda1626
@igorboroda1626 3 года назад
Максим, расскажи пожалуйста как добавлять кастомные обработчики событий наподобии Awake, Start, Update в Unity. Толковой информации на эту тему не нашел в интернете.
@gaitavr1992
@gaitavr1992 3 года назад
А как они должны встраиваться в игровой цикл юнити?
@igorboroda1626
@igorboroda1626 3 года назад
@@gaitavr1992 в том и вопрос: что это, как оно работает и можно ли создать свои пободные кастомные обработчики?
@Roodewald
@Roodewald 3 года назад
ПРИВЕТ ОТ РОМЫ САКУТИНА
@gaitavr1992
@gaitavr1992 3 года назад
Я уже передал)
@sh1nler243
@sh1nler243 3 года назад
Можно ли просить автора контента, но можете записать видео по архитектуре Unity, как правильно должен выглядеть код или получить ссылку на те источники где это можно вычитать. Заранее, большое спасибо.
@gaitavr1992
@gaitavr1992 3 года назад
Единого верного решения нет
@sh1nler243
@sh1nler243 3 года назад
@@gaitavr1992 , то есть применяешь принципы солид и ооп, где-то паттерны если они по тематике подходят и по остальному не париться?
@gaitavr1992
@gaitavr1992 3 года назад
Это всегда компромис между качеством кода, стоимостью разработки и устойчивостью к изменениям. Все приходит с опытом
@mimineko3100
@mimineko3100 3 года назад
@@gaitavr1992 на самом деле НЕТ компромиссов! Главное - это экономичность системных ресурсов! всё остальное - лишь вкусовщина и чьи-то антогонистические штампы. Считаю, всем стоит пожертвовать ради производительности, а жертвовать производительностью нельзя ни ради чего. Иначе, тормознутая игра, с самым чистым и замечательным кодом, будет никому не нужна. А в Юнити как нигде, с производительностью проблемы... да и у шарпа, скорость выполнения ниже, чем у тех же С++
@gaitavr1992
@gaitavr1992 3 года назад
Оптимизировать код нужно только в узких горлышках, то что принесет максимальный эффект. А вот пожертвовав читабельностью в месте, которое выиграет пару миллисекунд обойдётся дорого при дальнейшей поддержке
@bibyter6451
@bibyter6451 3 года назад
Как дать лучнику пул пуль - не использовать mono beh )
@bibyter6451
@bibyter6451 3 года назад
А вообще вариантов немного, синглтон, назначение зависимости при создании, инжект(SO сюда же) и все (
@gaitavr1992
@gaitavr1992 3 года назад
Тогда логика автора выкидывается полностью. Задача не переписать код, а немного порефакторить, условно на один уровень лучше сделать
@neverworld8815
@neverworld8815 3 года назад
О боже сколько же там if else
@nikitabbrv5947
@nikitabbrv5947 3 года назад
Зачем я смотрю рефакторинг C# кода, если я учу пайтон, и еще не прошел ни классов, ни декораторов ни ООП ))
@andreygritsenko751
@andreygritsenko751 3 года назад
Хотелось бы про UniRX послушать
Далее
Борщ в стиле высокой кухни!
00:57
Жадные алгоритмы
11:10
Просмотров 13 тыс.
Паттерн наблюдатель в unity3D
6:56
Clean Code using the Strategy Pattern
12:34
Просмотров 14 тыс.
Паттерны стратегия в unity3D
6:29
Просмотров 28 тыс.
Борщ в стиле высокой кухни!
00:57