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

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

КОМЕНТАРІ • 101

  • @gaitavr1992
    @gaitavr1992  3 роки тому +15

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

    • @PaulGeraskin
      @PaulGeraskin 2 роки тому

      Спасибо большоее. Может на гитхаб, чтоб не потерялось?

  • @PavloKenor
    @PavloKenor 3 роки тому +38

    Даешь народу видео по State Machine и ECS! Лайк однозначно!

  • @NERVOUSHACKER
    @NERVOUSHACKER 3 роки тому +26

    кто от Романа ?

  • @user-cm9hc5kn4i
    @user-cm9hc5kn4i 2 роки тому

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

  • @user-sf9ib9wj7j
    @user-sf9ib9wj7j 3 роки тому +4

    Спасибо, Максим!
    Вечером буду разбираться и понимать!

    • @gaitavr1992
      @gaitavr1992  3 роки тому +1

      Если что, я залил два архива(до и после)

  • @AlexPlayer1000
    @AlexPlayer1000 3 роки тому +2

    Наконец то рефакторинг, пожалуйста продолжайте

  • @user-nm5zh2zb8c
    @user-nm5zh2zb8c 3 роки тому

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

  • @user-nm5zh2zb8c
    @user-nm5zh2zb8c 3 роки тому +6

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

  • @OniGameDev
    @OniGameDev 3 роки тому +4

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

  • @user-tx5mi3ie2z
    @user-tx5mi3ie2z 3 роки тому +4

    Привет,жду твоих видосов,как свой День Рождения.Спасибо за твой труд)

    • @gaitavr1992
      @gaitavr1992  3 роки тому +5

      Хорошо, что не раз в году)

  • @user-pd9eq4dq7n
    @user-pd9eq4dq7n 3 роки тому

    Спасибо было интересно.

  • @nekitak3472
    @nekitak3472 3 роки тому +6

    Не пишу на шарпе, но очень интересно послушать про разные архитектурные фичи, однозначно лаек
    upd с нанесения логического урона на 11:23 проорал

  • @vlad9236
    @vlad9236 2 роки тому +1

    За Эмбиент из Deus Ex: Human Revolution - царский лайк!

  • @VADIM-SOLOV
    @VADIM-SOLOV 2 роки тому

    Спасибо за видео :)

  • @Diyozen
    @Diyozen 3 роки тому

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

    • @gaitavr1992
      @gaitavr1992  3 роки тому +6

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

  • @finif9192
    @finif9192 3 роки тому

    Комментик для мотивации))

  • @creep1ch442
    @creep1ch442 3 роки тому +6

    Сделай видосик по DI (Dependecy Injection) 🥺 пожалуйста

  • @inetto84
    @inetto84 3 роки тому +2

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

    • @gaitavr1992
      @gaitavr1992  3 роки тому +4

      Совсем else не использовать наверное слишком круто)

    • @inetto84
      @inetto84 3 роки тому +2

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

    • @oleksandrbespalov9713
      @oleksandrbespalov9713 3 роки тому +1

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

  • @jonro753
    @jonro753 Рік тому +1

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

  • @r3dok201
    @r3dok201 2 роки тому

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

  • @AlexStraga
    @AlexStraga 3 роки тому +2

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

    • @gaitavr1992
      @gaitavr1992  3 роки тому +2

      Больше похоже на интерсептеров у кэриера в старкрафте

    • @AlexStraga
      @AlexStraga 3 роки тому

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

    • @user-nm5zh2zb8c
      @user-nm5zh2zb8c 3 роки тому

      Пули исчезнули бы)

  • @sanded9321
    @sanded9321 Рік тому

    А как производительнее при одинаковом количестве выстрелов делать выстрел пулями или рейкастами? и если потом переносить в мультиплеер правильнее?

  • @kirillsviderski4739
    @kirillsviderski4739 3 роки тому

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

    • @gaitavr1992
      @gaitavr1992  3 роки тому

      Надеюсь, было полезно

  • @posmacnicolai
    @posmacnicolai 3 роки тому

    Тяжело идет но очень круто!

  • @nikitanechaev890
    @nikitanechaev890 2 роки тому

    Куда можно скинуть тестовое на код ревью? У меня в запасе несколько имеется

  • @purelame4969
    @purelame4969 3 роки тому +1

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

    • @gaitavr1992
      @gaitavr1992  3 роки тому +1

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

    • @purelame4969
      @purelame4969 3 роки тому

      @@gaitavr1992 Спасибо за быстрый ответ!

  • @user-pd9eq4dq7n
    @user-pd9eq4dq7n 3 роки тому +4

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

    • @gaitavr1992
      @gaitavr1992  3 роки тому +5

      По job system есть два ролика, скоро будет про ecs, уж больно часто спрашивают. Прийдется сделать)

    • @user-pd9eq4dq7n
      @user-pd9eq4dq7n 3 роки тому +1

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

    • @gaitavr1992
      @gaitavr1992  3 роки тому +1

      Нет подходящего проекта. Вот в tower defense попробую вставить

  • @user-oq8yt1vc7u
    @user-oq8yt1vc7u 2 роки тому

    Сколько вы занимаетесь разработкой на Юнити?

  • @igorboroda1626
    @igorboroda1626 3 роки тому

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

    • @gaitavr1992
      @gaitavr1992  3 роки тому

      А как они должны встраиваться в игровой цикл юнити?

    • @igorboroda1626
      @igorboroda1626 3 роки тому

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

  • @behappianstudio3576
    @behappianstudio3576 3 роки тому +2

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

    • @gaitavr1992
      @gaitavr1992  3 роки тому +2

      Не увидите)

    • @oleksandrbespalov9713
      @oleksandrbespalov9713 3 роки тому

      I'm here to help. Settings - Playback speed 1.5x

    • @behappianstudio3576
      @behappianstudio3576 3 роки тому

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

  • @HiiragiKagami
    @HiiragiKagami Рік тому

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

  • @theoctan8569
    @theoctan8569 3 роки тому +1

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

    • @gaitavr1992
      @gaitavr1992  3 роки тому +3

      Не довелось использовать behavior, проверю как оно работает. А вот своих реализаций паттерна достаточно

    • @oleksandrbespalov9713
      @oleksandrbespalov9713 3 роки тому +2

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

  • @alexspeleers
    @alexspeleers 3 роки тому

    музычка топчег - напоминает Warframe ((:

  • @nomad4994
    @nomad4994 3 роки тому +5

    Нормальные такие тестовые на джуниора.

    • @Bug3Funny
      @Bug3Funny 3 роки тому +3

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

    • @justlama0
      @justlama0 3 роки тому

      конкуренция большая

    • @Bug3Funny
      @Bug3Funny 3 роки тому

      @@justlama0 как и желание платить меньше за большие знания

    • @gaitavr1992
      @gaitavr1992  3 роки тому

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

  • @ArxPlay
    @ArxPlay 2 роки тому +1

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

    • @gaitavr1992
      @gaitavr1992  2 роки тому

      Нсть желание сделать код ревью?

  • @_EnVyUs
    @_EnVyUs 3 роки тому +1

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

    • @gaitavr1992
      @gaitavr1992  3 роки тому +1

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

    • @_EnVyUs
      @_EnVyUs 3 роки тому

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

  • @ivanmayerle1333
    @ivanmayerle1333 3 роки тому

    Hi From Sakutin!

  • @sh1nler243
    @sh1nler243 3 роки тому

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

    • @gaitavr1992
      @gaitavr1992  3 роки тому

      Единого верного решения нет

    • @sh1nler243
      @sh1nler243 3 роки тому

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

    • @gaitavr1992
      @gaitavr1992  3 роки тому

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

    • @mimineko3100
      @mimineko3100 3 роки тому

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

    • @gaitavr1992
      @gaitavr1992  3 роки тому +5

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

  • @DmitryTimofeev_general
    @DmitryTimofeev_general 3 роки тому +1

    У тебя терпение конечно бездонное в этом всем ковыряться)

    • @gaitavr1992
      @gaitavr1992  3 роки тому +2

      Когда увидел енумератор - выпал в осадок на некоторое время)

    • @DmitryTimofeev_general
      @DmitryTimofeev_general 3 роки тому +1

      Это была пасхалочка!)))

    • @user-nm5zh2zb8c
      @user-nm5zh2zb8c 3 роки тому

      А почему? Иенумератор как-то сложно отследить?

    • @gaitavr1992
      @gaitavr1992  3 роки тому

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

  • @gazooc
    @gazooc 3 роки тому +1

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

    • @gaitavr1992
      @gaitavr1992  3 роки тому

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

    • @ve1c0m
      @ve1c0m 3 роки тому

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

    • @gaitavr1992
      @gaitavr1992  3 роки тому +1

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

    • @gazooc
      @gazooc 3 роки тому +1

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

    • @gaitavr1992
      @gaitavr1992  3 роки тому +1

      Когда вопрос памяти вытеснит вопрос процессора - пересмотрите свои взгляды

  • @Roodewald
    @Roodewald 3 роки тому +1

    ПРИВЕТ ОТ РОМЫ САКУТИНА

  • @andreygritsenko751
    @andreygritsenko751 3 роки тому

    Хотелось бы про UniRX послушать

  • @bibyter6451
    @bibyter6451 3 роки тому

    Как дать лучнику пул пуль - не использовать mono beh )

    • @bibyter6451
      @bibyter6451 3 роки тому

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

    • @gaitavr1992
      @gaitavr1992  3 роки тому +4

      Тогда логика автора выкидывается полностью. Задача не переписать код, а немного порефакторить, условно на один уровень лучше сделать

  • @neverworld8815
    @neverworld8815 3 роки тому

    О боже сколько же там if else

  • @nikitabbrv5947
    @nikitabbrv5947 3 роки тому +2

    Зачем я смотрю рефакторинг C# кода, если я учу пайтон, и еще не прошел ни классов, ни декораторов ни ООП ))