43

То, что мне помогло в изучении C# и Unity

С#

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

Я никакой не программист, не ругайте, но исправляйте.


Несколько условий, которых я пытаюсь придерживаться:

- Придумывай информативные имена.

- Используй имена, которые характеризуют их модификатор доступа. Есть правила, но вы можете использовать удобное вам написание. Это поможет вам ориентироваться, а ещё так красивее.


private int _age;

public int Age;

const int AGE;


- Избегай публичных полей. Используйте [SerializeField] если доступ нужен только из инспектора. Используйте свойства, если доступ нужен вне класса.

[SerializeField] private int _age;

public int Age => _age;


Принципы ООП.

Так как это касается всего ООП, информации в интернете более чем достаточно. За правильной и точной формулировкой, лучше обратитесь к другим источникам.. Я постараюсь передать своё виденье, от лица новичка. Возможно, это будет кому-нибудь полезно.

После того как вы познакомились с наследованием, инкапсуляцией и полиморфизмом, прошу обратить ваше внимание на другие принципы.

DRY - не повторяйся. Если вы заметили повторение своего кода, стало быть делаете что-то не так. Не повторяй, а пере используй.


SOLID - надо признаться, я и сам не понимаю несколько принципов, а их формулировка может быть и вовсе неправильной. Но даже такое представление очень сильно мне помогает.

SRP - принцип единой ответственности. Каждый класс должен отвечать за что-то одно. Например: если вы делаете управление персонажем, не стоит сюда же добавлять считывание действий игрока или какую-нибудь механику стрельбы, и т.д. До знакомства с этим принципом, у меня часто возникали классы типа "Player" который отвечал за всё и сразу.

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


OCP - принцип открытости / закрытости. Пиши так, чтобы при расширении функционала тебе не нужно было что-то менять в уже существующем коде.

Там ещё несколько принципов, которые я не осмелюсь описывать, так как особо не понимаю. Но более чем уверен, что их понимание сильно повлияет на ваш прогресс.

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

Что касаемо меня, мои познания заканчиваются на Observer, State и Singleton - который в свою очередь является противоречивым, как говорят умные дядьки, но эти дискуссии мы им и оставим. На данном этапе нас это не касается, если это упрощает нашу жизнь.

РЕСУРСЫ


Англоязычные:


Brackeys (YouTube) : https://www.youtube.com/@Brackeys
Огромное кол-во обучающих видео, которые помогут вам начать свой путь. Скорее всего тут вы найдёте ответ на любой свой вопрос, на который вам ответят простым и наглядным образом.

Tarodev (YouTube) : https://www.youtube.com/@Tarodev
Рассказывает как о простых, так и о более сложных вещях в очень доступной форме.

CodeMonkey (YouTube) : https://www.youtube.com/@CodeMonkeyUnity


Официальный курс Unity - Хороший способ, чтобы начать.


Курс Udemy - The Unity C# Survival Guide. Вам расскажут о C# в Unity, начиная с азов постепенно увеличивая сложность. Крайне удобно использовать как шпаргалку. Я его спиратил, да простят меня ребята.

Русскоязычные:


Emerald Powder (YouTube) : https://www.youtube.com/@EmeraldPowder
Пожалуй самый полезный канал в ru сегменте, для меня. Видео не так много, но они очень полезные и информативные.


В интернете огромное кол-во информации по Unity, что и стало для меня основным критерием выбора движка. С уверенностью можете искать реализацию какой-то механики или решение проблемы, скорее всего вы это найдёте.
Практика - главное. Можно бесконечно читать, но не закрепив знания действиями, они в скором времени исчезнут.

Заранее извиняюсь, если затриггерил какого-нибудь программиста.

Спасибо за внимание.

Правила сообщества

ОБЩИЕ ПРАВИЛА:

- Уважайте чужой труд и используйте конструктивную критику

- Не занимайтесь саморекламой, пишите качественные и интересные посты

- Никакой политики


СТОИТ ПУБЛИКОВАТЬ:

- Посты о Вашей игре с историей её разработки и описанием полученного опыта

- Обучающие материалы, туториалы

- Интервью с опытными разработчиками

- Анонсы бесплатных мероприятий для разработчиков и истории их посещения;
- Ваши работы, если Вы художник/композитор и хотите поделиться ими на безвозмездной основе

НЕ СТОИТ ПУБЛИКОВАТЬ:

- Посты, содержащие только вопрос или просьбу помочь
- Посты, содержащие только идею игры

- Посты, единственная цель которых - набор команды для разработки игры

- Посты, не относящиеся к тематике сообщества

Подобные посты по решению администрации могут быть перемещены из сообщества в общую ленту.

ЗАПРЕЩЕНО:

- Публиковать бессодержательные посты с рекламой Вашего проекта (см. следующий пункт), а также все прочие посты, содержащие рекламу/рекламные интеграции

- Выдавать чужой труд за свой

Подобные посты будут перемещены из сообщества в общую ленту, а их авторы по решению администрации могут быть внесены в игнор-лист сообщества.


О РАЗМЕЩЕНИИ ССЫЛОК:

Ссылка на сторонний ресурс, связанный с игрой, допускается только при следующих условиях:

- Пост должен быть содержательным и интересным для пользователей, нести пользу для сообщества

- Ссылка должна размещаться непосредственно в начале или конце поста и только один раз

- Cсылка размещается в формате: "Страница игры в Steam: URL"

3
Автор поста оценил этот комментарий

Ещё могу посоветовать «чистый код» и «чистую архитектуру» Боба Мартина. Это основы, с большим количеством примеров.

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Спасибо, ознакомлюсь

0
Автор поста оценил этот комментарий

Все принципы SOLID довольно простые и понятные, если понимать, как работает ООП (в особенности полиморфизм).

LSP - мы должны иметь возможность использовать производные классы так же, как и базовый. На примере: у нас есть класс Weapon с виртуальным методом DealDamage(), и несколько производных от него - Spear, Sword и Warhammer - у всех своё переопределение метода DealDamage(). Суть принципа - мы должны вызвать этот метод у любого Weapon и не получить ошибок. Т.е. если у класса Sword в этом методе будет обращение к переменной с длинной меча, от которой зависит урон (и которую мы должны проинициализировать до обращения к методу нанесения урона), то принцип будет нарушен.
ISP - похож на SRP, только для интерфейсов. Не делаем громадных интерфейсов с кучей методов. Если нам нужен интерфейс для нанесения урона - делаем интерфейс с методом DealDamage(). Не нужно в него пихать BlockDamage(), BuffDamage() и прочие методы, которые в каких-то классах будут реализованы, в каких-то нет.

DIP - зависим от абстракций, не от конкретики. Если у нас есть метод Reforge(), перековывающий мечи - лучше передавать в него абстрактный Weapon, чем непосредственно Sword. Вполне возможно, что в будущем гейм-дизайнер скажет - теперь мы можем перековывать топоры. Это помогает при рефакторинге.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Отлично объяснили, спасибо)

0
Автор поста оценил этот комментарий

Нет, объявление поля между методов это однозначно плохая практика, никой наглядности тут нет, только путаница. Так нигде не принято. Мне потребовалось время чтобы понять откуда в Start появилось _countDownTime. Если хотелось спрятать то можно было ее объявить в корутине и использовать только там.


Скорость и перезарядка это все о времени в float. Читать удобней когда написано единообразно.


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

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Да, вы правы. Спасибо за информативный разбор. Показал бы и что-то более сложное, но там ошибки и я вижу)

0
Автор поста оценил этот комментарий

ЛадноХраниСвоиСекреты.jpg
Хотелось увидеть что-то больше одного метода, чтобы затеять спор обсуждение.

А тут что? Объявление поля между методов, объявление полей float двумя строками а Vector2 в одну строку, название класса не соответствует содержимому(тут не поезд а его двигатель), поезд командует камерой(должен только вызывать событие) - больше доёбки чем обсуждение

Иллюстрация к комментарию
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Ну я могу аргументировать. Объявление поля между методом - потому что оно относится к корутине, а остальным о ней знать нет необходимости, для наглядности. Почему float в две, а Vector2 в одну - потому начальное положение и конечное логически связаны, когда как скорость и перезарядка не имеют друг к другу никакой связи. Не совсем понимаю, почему не подходящее имя. Ведь он не только перемещает из точки А в точку Б, но ещё делает это с интервалом и обнуляет положение. Насчёт камеры, соглашусь

показать ответы
0
Автор поста оценил этот комментарий

В ECS получается больше кода и мозгу надо время на переключение с объектов на системы, но вообще да, он гибче. Для ознакомления можно читануть мою старую статейку https://habr.com/ru/post/358108/

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Хорошая статья) Звучит, на удивление, просто. Стоит ли начинать учить новую версию от Unity, там и конвертировать объекты в Entity можно, и что-то ещё. Bustedbunny отзывается о ней не очень, как я посмотрю

показать ответы
0
Автор поста оценил этот комментарий
Ну что вы, тут совершенно нечего стесняться. Мы поможем уже сегодня
Иллюстрация к комментарию
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Вы похожи на человека, которому можно доверять, но только между нами. Вот значит, на фоне через какое-то время проезжает поезд. Специально нашёл скрипт, который сложно испортить)

Иллюстрация к комментарию
показать ответы
0
Автор поста оценил этот комментарий
Хорошо, давайте теперь посмотрим на ваш код
Иллюстрация к комментарию
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Приходите через пол годика, пока что я стесняюсь)

показать ответы
0
Автор поста оценил этот комментарий

Я к тому, что в Микрософте есть хорошие подробные пошаговые обучалки с практикой для начального уровня, а народ с умным видом лезет какие-то ютубчики искать мутные 😀


И в самом Unity тоже есть обучалки

Кстати вопрос если вы их проходили, стоит их проходить?


https://learn.unity.com

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Да проходил. Но я на них наткнулся, когда у меня уже был какой никакой опыт. Но да, мне кажется, они хорошо подойдут для старта изучения unity

Автор поста оценил этот комментарий

Учитесь в первоисточнике

Там и на русском языке тоже все есть если надо


https://learn.microsoft.com/en-us/training/paths/csharp-firs...

https://dotnet.microsoft.com/en-us/learn/csharp

https://learn.microsoft.com/en-us/training/paths/csharp-firs...
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Спасибо. Просто изначально я хотел делать игры, а не стать хорошим программистом, поэтому стал изучать сразу C# для Unity, упустив какую-то базу. Оказалось, что хорошей игре требуется хороший программист)

показать ответы
1
Автор поста оценил этот комментарий
А еще лучше - изучать ECS, а не проклятый OOP.
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Хотел начать изучать ECS, но информации нашёл не так много, как хотелось бы. Так же решил, что будет каша в голове, если начну изучать такой кардинально отличающийся подход.

показать ответы
3
Автор поста оценил этот комментарий
Автор, доброго вам!) Рекомендую вам ознакомиться с DI или IoC по другому. Для unity есть замечательный DI контейнер Zenject. Очень сильно облегчает жизнь и написание кода.

Так же очень рекомендую нагуглить K-Syndicate. (не реклама)) Ребята с Украины, но Ютуб канал на русском. У них реально много полезных видосов, по тому же зенжекту например. Курс их можно найти на ннм)
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Спасибо за информацию! Слышал про Zenject когда-то, показалось чем-то очень сложным в моём понимании, на первый взгляд. Посмотрю ещё раз

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества