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

2021 ж. 3 Мам.
18 896 Рет қаралды

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

Пікірлер
  • Я залил два архива до и после рефакторинга. Их можно найти по этой ссылке - drive.google.com/drive/folders/1Q2r8uHt5toZbUZeZwIDmnh12wTFbrnx5?usp=sharing

    @gaitavr1992@gaitavr19923 жыл бұрын
    • Спасибо большоее. Может на гитхаб, чтоб не потерялось?

      @PaulGeraskin@PaulGeraskin2 жыл бұрын
  • Даешь народу видео по State Machine и ECS! Лайк однозначно!

    @PavloKenor@PavloKenor3 жыл бұрын
  • Лайк, подписка. Первый раз наткнулся на канал и это именно то, что мне нужно прямо сейчас. Будем учиться на чужих ошибках. Продолжай в том же духе

    @user-cm9hc5kn4i@user-cm9hc5kn4i2 жыл бұрын
  • кто от Романа ?

    @NERVOUSHACKER@NERVOUSHACKER3 жыл бұрын
  • Спасибо, Максим! Вечером буду разбираться и понимать!

    @user-sf9ib9wj7j@user-sf9ib9wj7j3 жыл бұрын
    • Если что, я залил два архива(до и после)

      @gaitavr1992@gaitavr19923 жыл бұрын
  • Наконец то рефакторинг, пожалуйста продолжайте

    @AlexPlayer1000@AlexPlayer10003 жыл бұрын
  • Ну тут однозначно лайк+подписка. Буду ждать новых роликов, интересно посмотреть на чужой код и его улучшение. Может и свой проект как нибудь выложу на твоё обозрение)

    @OniGameDev@OniGameDev3 жыл бұрын
  • Отличный обзор. Нужно будет самому посмотреть, и разобраться.

    @user-nm5zh2zb8c@user-nm5zh2zb8c3 жыл бұрын
  • Привет. Использование библиотеки поиска пути и не использовать коллайдеры это было основным требованием. Пул создавался для хоть какой оптимизации. Ведь время на задание было ограничено. А сделать нужно было много чего. Налепил , как ты и сказал, чтобы выиграть время)

    @user-nm5zh2zb8c@user-nm5zh2zb8c3 жыл бұрын
  • Не пишу на шарпе, но очень интересно послушать про разные архитектурные фичи, однозначно лаек upd с нанесения логического урона на 11:23 проорал

    @nekitak3472@nekitak34723 жыл бұрын
  • Спасибо было интересно.

    @user-pd9eq4dq7n@user-pd9eq4dq7n3 жыл бұрын
  • Привет,жду твоих видосов,как свой День Рождения.Спасибо за твой труд)

    @user-tx5mi3ie2z@user-tx5mi3ie2z3 жыл бұрын
    • Хорошо, что не раз в году)

      @gaitavr1992@gaitavr19923 жыл бұрын
  • Спасибо за видео :)

    @VADIM-SOLOV@VADIM-SOLOV2 жыл бұрын
  • Как всегда, круто! 12:24 - Думаю, что всё-таки следует раскрывать контракты явно. Передача Entity-создателя может немного смутить. С другой стороны, это расширит "конструктор" до 4-х аргументов, что тоже уже не очень приятно.

    @Diyozen@Diyozen3 жыл бұрын
    • Все верно, на самом деле если дать оценку исходному коду, то это 3 из 10. Я сделал из него только 5(максимум). Причины по которой я не делал выше две: 1) Хронометраж видео, нужно делать по этапам или переписывать с нуля( в этом случае половина аудитории не поймет из чего это вышло. 2) Из-за исходного кода, так как я хотел показать тем, кто пишет в таком стиле или часто работает с кодом в таком стиле, как сделать немного лучше и главное понятно

      @gaitavr1992@gaitavr19923 жыл бұрын
  • За Эмбиент из Deus Ex: Human Revolution - царский лайк!

    @vlad9236@vlad92362 жыл бұрын
  • Комментик для мотивации))

    @finif9192@finif91923 жыл бұрын
  • Как новичок новичку, хочется посоветовать не городить бесконечные вложенные if else, а в написании методов стараться следовать правилу: плюс - минус 10 строк на метод. Бесконечные разветвленные портянки практически не читаемы. Лично я стараюсь по возможности вообще не использовать оператор else, что делает код гораздо понятнее, но это уже дело вкуса, наверное. А автору канала спасибо за познавательное видео.

    @inetto84@inetto843 жыл бұрын
    • Совсем else не использовать наверное слишком круто)

      @gaitavr1992@gaitavr19923 жыл бұрын
    • Ну, да, так умеют только гуру чипа Линуса:) Но все же в большинстве случаев (как замечено на собственном опыте) else можно заменить на поведение по умолчанию, что делает код более плоским и более читаемым. Хотя, возможно, это накладывает дополнительную нагрузку на машину, что может быть критичным в гемдеве.

      @inetto84@inetto843 жыл бұрын
    • Разделение методов или классов по таким формальным ограничениям, как 10 строк приведет к лапшекоду, где методы вызывают методы, которые вызывают методы, которые вызывают методы. Дебажить такое это не менее адский процесс. Я думаю формальных ограничений быть не может, если например это метод валидации какого-то состояния по куче правил - там может быть огромное количество строк. Вопрос еще в том, что ни в оригинале, ни в рефакторинге не было замечено ни единого комментария в коде, хотя из того же видео было слышно, что комментировать есть что. Вот это тот момент, который часто упускается. Комментарии невероятно помогают, когда надо въехать что было у другого человека в голове, когда он писал код

      @oleksandrbespalov9713@oleksandrbespalov97133 жыл бұрын
  • Уничтожение объекта это ресурсозатратная операция, проще сделать пул объектов. Выделение и удаление памяти увеличивает кол во вызовов GC, что тоже негативно влияет на производительность. Больше кэша меньше работы с памятью

    @r3dok201@r3dok2012 жыл бұрын
  • Сделай видосик по DI (Dependecy Injection) 🥺 пожалуйста

    @creep1ch442@creep1ch4423 жыл бұрын
  • Спасибо за ролик, всегда интересно посмотреть рефакторинг. Забавно было бы если автор как пули реализовывал бомбардировщик ) Скидывает бомбы самолет, его сбивает пво и бомбы повисают в воздухе или ваще исчезают ) Хотя как геймплейная фича че бы и да?)

    @AlexStraga@AlexStraga3 жыл бұрын
    • Больше похоже на интерсептеров у кэриера в старкрафте

      @gaitavr1992@gaitavr19923 жыл бұрын
    • @@gaitavr1992 сто лет в СК не играл и ниче не помню. ) еще и во второй части на Крыльях свободы остановился (или как оно там называлось). А вот кстати зиккураты из ВарКрафта 3. Там вполне бы фишка с исчезанием пули подошла после разрушения башни. )

      @AlexStraga@AlexStraga3 жыл бұрын
    • Пули исчезнули бы)

      @user-nm5zh2zb8c@user-nm5zh2zb8c3 жыл бұрын
  • Бро, очень крутой видос. Сам учусь игры пилить (закончил учить шарп по курсу Сакутина недавно) и обзор кода - это просто топ при изучении языка, т.к. со стороны как правило видишь кучу ошибок, которые сам допускаешь)) разбор огонь 🔥

    @jonro753@jonro753 Жыл бұрын
    • Сакутин топ)

      @rom4ak_vls@rom4ak_vls Жыл бұрын
  • Тяжело идет но очень круто!

    @posmacnicolai@posmacnicolai3 жыл бұрын
  • Скажу честно, через паузу на курсах рассматривал с подростками видео. Как раз тема актуальна, так как группа находится на стадии написания игр своими руками на минмиальных фреймворках

    @kirillsviderski4739@kirillsviderski47393 жыл бұрын
    • Надеюсь, было полезно

      @gaitavr1992@gaitavr19923 жыл бұрын
  • Очень люблю ваши видео! Действительно познавательные, но скучновато) Даже для того человека, который пришёл за знаниями, будет проблематично досмотреть до конца за раз. Но что поделать, "ходите узкими вратами", как говорится) p.s Верю и надеюсь, что никогда не увижу на этом канале "Игра за 30 мин/1час/3часа"

    @behappianstudio3576@behappianstudio35763 жыл бұрын
    • Не увидите)

      @gaitavr1992@gaitavr19923 жыл бұрын
    • I'm here to help. Settings - Playback speed 1.5x

      @oleksandrbespalov9713@oleksandrbespalov97133 жыл бұрын
    • @@oleksandrbespalov9713 данный подход нужен для того, чтобы половину информации мимо ушей пропустить!

      @behappianstudio3576@behappianstudio35763 жыл бұрын
  • Пробовали ли вы ECS unity dots, было интересно услышать ваше мнение о вообще ECS. Насколько удобно и тд.

    @user-pd9eq4dq7n@user-pd9eq4dq7n3 жыл бұрын
    • По job system есть два ролика, скоро будет про ecs, уж больно часто спрашивают. Прийдется сделать)

      @gaitavr1992@gaitavr19923 жыл бұрын
    • @@gaitavr1992 Еее спасибо, буду ждать с нетерпением.) А вы не пользуетесь ECS для разработки на постоянной основе?

      @user-pd9eq4dq7n@user-pd9eq4dq7n3 жыл бұрын
    • Нет подходящего проекта. Вот в tower defense попробую вставить

      @gaitavr1992@gaitavr19923 жыл бұрын
  • Максим, а если не секрет, по каким источникам вы обучались программированию на C# + Unity?

    @purelame4969@purelame49693 жыл бұрын
    • Я начинал с C++ по учебнику и статьям, пытаясь пробовать писать консольные игры. Потом мне показали юнити, и я начал читать Шилда по шарпу, а юнити везде где была информация. Реальный рост начался с первой работой в 2013м

      @gaitavr1992@gaitavr19923 жыл бұрын
    • @@gaitavr1992 Спасибо за быстрый ответ!

      @purelame4969@purelame49693 жыл бұрын
  • Нормальные такие тестовые на джуниора.

    @nomad4994@nomad49943 жыл бұрын
    • я вот тоже думаю, еще пару лет и у джуна уже будет требовать 3 года разработки хотябы на ААА проектах

      @Bug3Funny@Bug3Funny3 жыл бұрын
    • конкуренция большая

      @justlama0@justlama03 жыл бұрын
    • @@justlama0 как и желание платить меньше за большие знания

      @Bug3Funny@Bug3Funny3 жыл бұрын
    • Ну так всегда происходит. В 2012м году на юнити брали джуном любого с базовым знанием c#

      @gaitavr1992@gaitavr19923 жыл бұрын
  • Максим, расскажи пожалуйста как добавлять кастомные обработчики событий наподобии Awake, Start, Update в Unity. Толковой информации на эту тему не нашел в интернете.

    @igorboroda1626@igorboroda16263 жыл бұрын
    • А как они должны встраиваться в игровой цикл юнити?

      @gaitavr1992@gaitavr19923 жыл бұрын
    • @@gaitavr1992 в том и вопрос: что это, как оно работает и можно ли создать свои пободные кастомные обработчики?

      @igorboroda1626@igorboroda16263 жыл бұрын
  • А как производительнее при одинаковом количестве выстрелов делать выстрел пулями или рейкастами? и если потом переносить в мультиплеер правильнее?

    @sanded9321@sanded9321 Жыл бұрын
  • музычка топчег - напоминает Warframe ((:

    @alexspeleers@alexspeleers3 жыл бұрын
    • Это deus ex

      @gaitavr1992@gaitavr19923 жыл бұрын
  • сразу забрасываю удочку на будущее: вопрос по поводу паттерна состояния. Лучше писать свой конечный автомат или пользоваться StateMachineBehaviour? Уверен, что про него тоже стоит хоть немного упомянуть, чтобы знать в каких случаях он лучше, а в каких лучше использовать чистый паттерн состояние.

    @theoctan8569@theoctan85693 жыл бұрын
    • Не довелось использовать behavior, проверю как оно работает. А вот своих реализаций паттерна достаточно

      @gaitavr1992@gaitavr19923 жыл бұрын
    • StateMachineBehaviour используется в юнити аниматоре для обработки событий начала/окончания/перехода анимаций. Можно подвязать какое-то действие на окончание анимации (состояния), можно управлять параметрами самого аниматора, например делать случайные переходы, скорость анимации и тд. Но для чего это не вполне подходит - это для чисто логических конечных автоматов, которые не связаны с анимациями. Технически конечно можно реализовать логические стейт машины на основе юнити аниматора, но на мой взгляд это потянет за собой намного больше проблем, чем решений.

      @oleksandrbespalov9713@oleksandrbespalov97133 жыл бұрын
  • Пул игроков таки полезен если 6есть какие то особые условия создания игроков. Тем более если игроки не капсулы а что то сложное со скинами то их инициализация будет вызывать неприятный фриз, но если хранить и х в пуле прогрузив заранее то фризов уже не будет, как и лишних выделений памяти под создание игроков, а так же работы у GC по удалению игроков. 2 пула пуль странно, можно у пули хранить данные о фракции, ее стрелка, а при инициализации пули, указывать эту фракцию, либо если игроки запулены то можно и дальше держать на них ссылки прямо в обьекте пули. Менеджер пулов при том сделать универсальный а не заточенный под пули, тот же IPool выполнит задачу.

    @gazooc@gazooc3 жыл бұрын
    • Никому не нравится ждать лишнее время на старте, если будет сразу создаваться сотня сложных объектов и их инициализация, то оно того не стоит. А пули было принципиально оставить максимально похожим в использовании на старый код

      @gaitavr1992@gaitavr19923 жыл бұрын
    • @@gaitavr1992 можно и не ждать, а асинхронно спавнить в фоне либо корутиной

      @ve1c0m@ve1c0m3 жыл бұрын
    • Можно, и учитывая, что спавнер это отдельный компонент, то можно вынести интерфейс и работать с любой реализацией

      @gaitavr1992@gaitavr19923 жыл бұрын
    • @@gaitavr1992 вопрос геймплея. я лучше подожду 5 секунд на старте чем буду терпеть эти 5 секунд в виде микрофризов 20-50 раз в игре пока спавнятся враги. Да в целом считается плохим тоном создавать фризы в играх. и опять же убивать и потом заново создавать сложные обьекты, тоже дурость.

      @gazooc@gazooc3 жыл бұрын
    • Когда вопрос памяти вытеснит вопрос процессора - пересмотрите свои взгляды

      @gaitavr1992@gaitavr19923 жыл бұрын
  • Сколько вы занимаетесь разработкой на Юнити?

    @user-oq8yt1vc7u@user-oq8yt1vc7u2 жыл бұрын
  • Куда можно скинуть тестовое на код ревью? У меня в запасе несколько имеется

    @nikitanechaev890@nikitanechaev8902 жыл бұрын
  • Ну тут лайк однозначно, но...Мне одно не понятно: Для чего вот тот Reset() кулдауна атаки, который немного нарушает логику игры. Выходит так, что при смене цели местный воин сбрасывает и остаток времени до след. атаки. Т.е. если он будет окружён толпой врагов и (предположим) его атаки хватит убить врага с удара, то он выпилит эту толпу вокруг себя сразу же как добьёт первого из них.

    @HiiragiKagami@HiiragiKagami Жыл бұрын
  • Hi From Sakutin!

    @ivanmayerle1333@ivanmayerle13333 жыл бұрын
  • У меня такой вопрос, на сколько быстрее работает и запускается Rider в отличие от Visual studio?

    @_EnVyUs@_EnVyUs3 жыл бұрын
    • Я их не сравнивал в этом плане. Райдер выбран по причине лучшей интеграции с юнити

      @gaitavr1992@gaitavr19923 жыл бұрын
    • @@gaitavr1992 хм, скачал Rider, ну на первый взгляд, он намного быстрее запускается чем студия.

      @_EnVyUs@_EnVyUs3 жыл бұрын
  • Можно ли просить автора контента, но можете записать видео по архитектуре Unity, как правильно должен выглядеть код или получить ссылку на те источники где это можно вычитать. Заранее, большое спасибо.

    @sh1nler243@sh1nler2433 жыл бұрын
    • Единого верного решения нет

      @gaitavr1992@gaitavr19923 жыл бұрын
    • @@gaitavr1992 , то есть применяешь принципы солид и ооп, где-то паттерны если они по тематике подходят и по остальному не париться?

      @sh1nler243@sh1nler2433 жыл бұрын
    • Это всегда компромис между качеством кода, стоимостью разработки и устойчивостью к изменениям. Все приходит с опытом

      @gaitavr1992@gaitavr19923 жыл бұрын
    • @@gaitavr1992 на самом деле НЕТ компромиссов! Главное - это экономичность системных ресурсов! всё остальное - лишь вкусовщина и чьи-то антогонистические штампы. Считаю, всем стоит пожертвовать ради производительности, а жертвовать производительностью нельзя ни ради чего. Иначе, тормознутая игра, с самым чистым и замечательным кодом, будет никому не нужна. А в Юнити как нигде, с производительностью проблемы... да и у шарпа, скорость выполнения ниже, чем у тех же С++

      @mimineko3100@mimineko31002 жыл бұрын
    • Оптимизировать код нужно только в узких горлышках, то что принесет максимальный эффект. А вот пожертвовав читабельностью в месте, которое выиграет пару миллисекунд обойдётся дорого при дальнейшей поддержке

      @gaitavr1992@gaitavr19922 жыл бұрын
  • У тебя терпение конечно бездонное в этом всем ковыряться)

    @DmitryTimofeev_general@DmitryTimofeev_general3 жыл бұрын
    • Когда увидел енумератор - выпал в осадок на некоторое время)

      @gaitavr1992@gaitavr19923 жыл бұрын
    • Это была пасхалочка!)))

      @DmitryTimofeev_general@DmitryTimofeev_general3 жыл бұрын
    • А почему? Иенумератор как-то сложно отследить?

      @user-nm5zh2zb8c@user-nm5zh2zb8c3 жыл бұрын
    • @@user-nm5zh2zb8c Это вообще не очевидное решение, почему не брать обычную коллекцию?

      @gaitavr1992@gaitavr19923 жыл бұрын
  • А где можно увидеть код автора канала? Чисто им написанный с нуля

    @ArxPlay@ArxPlay2 жыл бұрын
    • Нсть желание сделать код ревью?

      @gaitavr1992@gaitavr19922 жыл бұрын
  • ПРИВЕТ ОТ РОМЫ САКУТИНА

    @Roodewald@Roodewald3 жыл бұрын
    • Я уже передал)

      @gaitavr1992@gaitavr19923 жыл бұрын
  • Хотелось бы про UniRX послушать

    @andreygritsenko751@andreygritsenko7513 жыл бұрын
  • Как дать лучнику пул пуль - не использовать mono beh )

    @bibyter6451@bibyter64513 жыл бұрын
    • А вообще вариантов немного, синглтон, назначение зависимости при создании, инжект(SO сюда же) и все (

      @bibyter6451@bibyter64513 жыл бұрын
    • Тогда логика автора выкидывается полностью. Задача не переписать код, а немного порефакторить, условно на один уровень лучше сделать

      @gaitavr1992@gaitavr19923 жыл бұрын
  • О боже сколько же там if else

    @neverworld8815@neverworld88152 жыл бұрын
  • Зачем я смотрю рефакторинг C# кода, если я учу пайтон, и еще не прошел ни классов, ни декораторов ни ООП ))

    @nikitabbrv5947@nikitabbrv59473 жыл бұрын
KZhead