Единый стиль наименований событий (event)
Название события начинается с приставки "On". Последующие слова названия начинаются с заглавной буквы. Оканчивается название события суффиксом "Event".
Название метода, подписанного на событие, начинается с приставки "On", последующие слова названия начинаются с заглавной буквы. В отличие от названия события НЕ ОКАНЧИВАЕТСЯ суффиксом "Event".
Небольшое отличие в названиях событий и подписанных на них методов позволяет моментально отличить событие от метода, когда среда разработки (IDE), предлагает автоподстановку, при написании кода. Уменьшается вероятность совершить промах, увеличивается скорость написания кода, повышается "понятность" кода.
___
#лр_хороший_код
Название события начинается с приставки "On". Последующие слова названия начинаются с заглавной буквы. Оканчивается название события суффиксом "Event".
Название метода, подписанного на событие, начинается с приставки "On", последующие слова названия начинаются с заглавной буквы. В отличие от названия события НЕ ОКАНЧИВАЕТСЯ суффиксом "Event".
Небольшое отличие в названиях событий и подписанных на них методов позволяет моментально отличить событие от метода, когда среда разработки (IDE), предлагает автоподстановку, при написании кода. Уменьшается вероятность совершить промах, увеличивается скорость написания кода, повышается "понятность" кода.
___
#лр_хороший_код
👍2
Модификаторы доступа пишутся ВСЕГДА
В некоторых источниках (и Unity в том числе) предлагается при использовании модификатора "private" - его опускать. То есть явно указывать лишь "public" и "protected". В таком случае методы и переменные уже не выглядят унифицировано, а следовательно при беглом чтении кода создается маленький хаос в голове. Удобнее читать, когда все методы и переменные выглядят одинаково.
___
#лр_хороший_код
В некоторых источниках (и Unity в том числе) предлагается при использовании модификатора "private" - его опускать. То есть явно указывать лишь "public" и "protected". В таком случае методы и переменные уже не выглядят унифицировано, а следовательно при беглом чтении кода создается маленький хаос в голове. Удобнее читать, когда все методы и переменные выглядят одинаково.
___
#лр_хороший_код
👍3
Использовать регионы для удобства работы с кодом
Любой класс можно условно разделить на участки кода, объединённые общим свойством. Такие участки кода удобно обрамлять тегами, которые позволяют "свернуть" участок кода.
Далее представлены типичные регионы, которые я обычно выделяю в коде.
1. CONSTANTS - участок кода с объявлением констант.
2. EVENTS (1) - участок кода с объявлением событий.
3. LIFECYCLE - участок кода с нативными методами MonoBehaviour (пр. Awake(), Start(), OnEnable() и др.).
4. EVENTS (2) - участок кода, с обработкой событий, на которые подписан текущий класс.
___
#лр_хороший_код
Любой класс можно условно разделить на участки кода, объединённые общим свойством. Такие участки кода удобно обрамлять тегами, которые позволяют "свернуть" участок кода.
Далее представлены типичные регионы, которые я обычно выделяю в коде.
1. CONSTANTS - участок кода с объявлением констант.
2. EVENTS (1) - участок кода с объявлением событий.
3. LIFECYCLE - участок кода с нативными методами MonoBehaviour (пр. Awake(), Start(), OnEnable() и др.).
4. EVENTS (2) - участок кода, с обработкой событий, на которые подписан текущий класс.
___
#лр_хороший_код
👍2
Показывай в инспекторе не публичные поля
Почти во всех видеоуроках (даже моих), курсах, туториалах и т.д. для настройки какого-то поля в инспекторе, в классе его помечают как public,
Возьмем для примера код выше. Он подразумевает, что я из другого класса могу поменять пивот при помощи примерно такого кода:
Если доступ извне нужен на чтение, рекомендуется дополнительно использовать свойство, немного изменив название приватной переменной:
___
#лр_хороший_код
Почти во всех видеоуроках (даже моих), курсах, туториалах и т.д. для настройки какого-то поля в инспекторе, в классе его помечают как public,
public Transform myPivot;У этого подхода есть явный минус: он слабо выдерживает проверку на инкапсуляцию (принцип прячь все, о чем не должны знать другие).
Возьмем для примера код выше. Он подразумевает, что я из другого класса могу поменять пивот при помощи примерно такого кода:
someClass.myPivot = newPivot;Для начинающих разработчиков такой подход - очень частое явление. Скорее всего, после такого изменения что-то сломается. Поэтому необходимо спрятать переменную, но при этом оставить возможность положить ссылку в редакторе. Объявление становится таким:
[SerializeField] private Transform myPivot;
Доступ извне закрыт. Все хорошо. Если доступ извне нужен на чтение, рекомендуется дополнительно использовать свойство, немного изменив название приватной переменной:
[SerializeField] private Transform m_myPivot;
public Transform myPivot => this.m_myPivot;
В таком случае, нежелательное изменение исключено, а доступ на чтение есть.___
#лр_хороший_код
👍2
Запилил урок с объяснением, как работают принципы ООП (объектно-ориентированного программирования) на практике в играх.
https://www.youtube.com/watch?v=od_hbf_sdvU&t
___
#лр_туториал
https://www.youtube.com/watch?v=od_hbf_sdvU&t
___
#лр_туториал
YouTube
Принципы ООП в C# в Unity. Рассказываю на примерах, как пользоваться
Поддержи канал, бро!
https://paypal.me/gamedevlavka - мир
https://boosty.to/gamedevlavka - рф
И даже криптой (пока только Ethereum):
0x7a53325D1C36Eea7BbE8C6a8D00f2a0efd580e77
Урок по Unity, посвященный практическим примерам реализации принципов объектно…
https://paypal.me/gamedevlavka - мир
https://boosty.to/gamedevlavka - рф
И даже криптой (пока только Ethereum):
0x7a53325D1C36Eea7BbE8C6a8D00f2a0efd580e77
Урок по Unity, посвященный практическим примерам реализации принципов объектно…
Почему я использую this, когда это совсем не обязательно
Вот уже несколько месяцев я пишу ключевое слово this перед переменными и методами класса. Важно отметить, что this можно писать только указывая на объекты текущего класса, и которые инициализированы при сборке, а не созданы во время выполнения методов (см. пример 1 ниже).
С одной стороны, каждый раз вписывать this - это лишнее время, доли секунды, но тем не менее. Однако, это даёт следующие плюсы:
1. Удобочитаемость. Когда я вижу ключевое слово this, я понимаю, что переменная или метод объявлены при сборке, в случае переменных - в начале класса. То есть, я знаю, где искать начало, и что где-то задано их значение по умолчанию. Я об этом не задумываюсь. Особенно, когда смотрю на код спустя пару месяцев.
2. Возможность не тратить силы на придумывание и написание имен для параметров публичных методов (см. пример 2 ниже). При отсутствии ключевого слова this, придётся называть переменную в параметрах метода как-то отлично от локальной переменной. От этого может пострадать понятность кода, что самое главное.
Не бойтесь тратить на this время. При должном количестве практики, вы привыкнете к этому слову и не будете замечать его написание. И будете рады, что пользуетесь им, взглянув на свой код спустя несколько месяцев.
___
#лр_хороший_код
Вот уже несколько месяцев я пишу ключевое слово this перед переменными и методами класса. Важно отметить, что this можно писать только указывая на объекты текущего класса, и которые инициализированы при сборке, а не созданы во время выполнения методов (см. пример 1 ниже).
С одной стороны, каждый раз вписывать this - это лишнее время, доли секунды, но тем не менее. Однако, это даёт следующие плюсы:
1. Удобочитаемость. Когда я вижу ключевое слово this, я понимаю, что переменная или метод объявлены при сборке, в случае переменных - в начале класса. То есть, я знаю, где искать начало, и что где-то задано их значение по умолчанию. Я об этом не задумываюсь. Особенно, когда смотрю на код спустя пару месяцев.
2. Возможность не тратить силы на придумывание и написание имен для параметров публичных методов (см. пример 2 ниже). При отсутствии ключевого слова this, придётся называть переменную в параметрах метода как-то отлично от локальной переменной. От этого может пострадать понятность кода, что самое главное.
Не бойтесь тратить на this время. При должном количестве практики, вы привыкнете к этому слову и не будете замечать его написание. И будете рады, что пользуетесь им, взглянув на свой код спустя несколько месяцев.
___
#лр_хороший_код
👍4👎2
Пользуйся словарями (Dictionary) - это удобно
Новички часто сторонятся использовать Dictionary. Это происходит по разным причинам, но в основном из-за того, что не до конца понимают его работу.
Если не погружаться в тонкости, то Dictionary - это таблица с двумя столбцами: ключ и значение.
- Одна строка этой таблицы - это один элемент (ключ + значение).
- И ключ и значение могут быть любыми типами данных.
- Нельзя вставить в один Dictionary два одинаковых ключа - выпадет исключение.
- Можно вставлять одинаковые значения с разными ключами.
Dictionary удобно использовать при хранении квестов, продуктов, скинов, инвентаря и других перечисляемых массивов.
P.S. В название переменной типа Dictionary в конце я всегда приписываю ~Map, так при подсказках IDE моментально становится понятно, какой это тип данных и при, начиная набирать map, интеллектуальный набор будет давать подсказки в виде уже существующих Dictionary. Просто и удобно!
___
#лр_хороший_код
Новички часто сторонятся использовать Dictionary. Это происходит по разным причинам, но в основном из-за того, что не до конца понимают его работу.
Если не погружаться в тонкости, то Dictionary - это таблица с двумя столбцами: ключ и значение.
- Одна строка этой таблицы - это один элемент (ключ + значение).
- И ключ и значение могут быть любыми типами данных.
- Нельзя вставить в один Dictionary два одинаковых ключа - выпадет исключение.
- Можно вставлять одинаковые значения с разными ключами.
Dictionary удобно использовать при хранении квестов, продуктов, скинов, инвентаря и других перечисляемых массивов.
P.S. В название переменной типа Dictionary в конце я всегда приписываю ~Map, так при подсказках IDE моментально становится понятно, какой это тип данных и при, начиная набирать map, интеллектуальный набор будет давать подсказки в виде уже существующих Dictionary. Просто и удобно!
___
#лр_хороший_код
👍1
Запилил урок с объяснением, как работает паттерн "Состояние" или "Поведение" на практике в играх.
https://www.youtube.com/watch?v=qaP8XLZap68
___
#лр_туториал
https://www.youtube.com/watch?v=qaP8XLZap68
___
#лр_туториал
YouTube
Паттерн состояния / поведения в C# в Unity. Рассказываю на примерах, как пользоваться
Урок по Unity, посвященный практическим примерам реализации паттерна проектирования под названием состояние или поведение.
Урок по Unity3D, однако именно эта тема подойдет для всех начинающих разработчиков, программирующих на C#.
___
Лавка Разработчика…
Урок по Unity3D, однако именно эта тема подойдет для всех начинающих разработчиков, программирующих на C#.
___
Лавка Разработчика…
Короче методы - понятнее код
Эта тема уже достаточно изжевана в книгах, однако, не все читают книги, поэтому вкратце расскажу.
Важно помнить, что наравне с тем, что у каждого класса должна быть одна ответственность, каждый метод также должен выполнять одно действие. Правда, не стоит пускаться в разнос и писать методы в одну строчку.
Есть правило: метод должен быть таким размером, чтобы он умещался на одном экране по высоте. То есть программист должен видеть на экране метод целиком, без прокручивания вниз или вверх.
___
#лр_хороший_код
Эта тема уже достаточно изжевана в книгах, однако, не все читают книги, поэтому вкратце расскажу.
Важно помнить, что наравне с тем, что у каждого класса должна быть одна ответственность, каждый метод также должен выполнять одно действие. Правда, не стоит пускаться в разнос и писать методы в одну строчку.
Есть правило: метод должен быть таким размером, чтобы он умещался на одном экране по высоте. То есть программист должен видеть на экране метод целиком, без прокручивания вниз или вверх.
___
#лр_хороший_код
👍1
Урок о том, что такое события (Event) в C#, как они работают, и почему их нужно повсеместно использовать при разработке игра на Unity3D.
https://www.youtube.com/watch?v=tfVnD1x1iqk
___
#лр_туториал
https://www.youtube.com/watch?v=tfVnD1x1iqk
___
#лр_туториал
YouTube
События (Events) в C#. Рассказываю на примерах в Unity3d, как пользоваться
Поддержи канал, бро!
https://paypal.me/gamedevlavka - мир
https://boosty.to/gamedevlavka - рф
И даже криптой (пока только Ethereum):
0x7a53325D1C36Eea7BbE8C6a8D00f2a0efd580e77
Урок по Unity, посвященный практическим примерам использования событий (Event)…
https://paypal.me/gamedevlavka - мир
https://boosty.to/gamedevlavka - рф
И даже криптой (пока только Ethereum):
0x7a53325D1C36Eea7BbE8C6a8D00f2a0efd580e77
Урок по Unity, посвященный практическим примерам использования событий (Event)…
Для качественной видеозаписи геймплея игры используй нативный Unity Recorder.
Устанавливается через Package Manager. Работает как часы!
___
#лр_советы
Устанавливается через Package Manager. Работает как часы!
___
#лр_советы
Коротенький урок о паттерне проектирования под названием Синглтон (Singleton). Рассказываю, что это и как им пользоваться в разработке игр в Unity3D
https://youtu.be/HFfSHlmMVzk
___
#лр_туториал
https://youtu.be/HFfSHlmMVzk
___
#лр_туториал
YouTube
Синглтон (Singleton) в C#. Рассказываю на примерах в Unity3d, как пользоваться
Поддержи канал, бро!
https://paypal.me/gamedevlavka - мир
https://boosty.to/gamedevlavka - рф
И даже криптой (пока только Ethereum):
0x7a53325D1C36Eea7BbE8C6a8D00f2a0efd580e77
Урок по Unity, посвященный практическим примерам использования паттерна проектирования…
https://paypal.me/gamedevlavka - мир
https://boosty.to/gamedevlavka - рф
И даже криптой (пока только Ethereum):
0x7a53325D1C36Eea7BbE8C6a8D00f2a0efd580e77
Урок по Unity, посвященный практическим примерам использования паттерна проектирования…
Недавно меня бесил момент, что у меня нет нормальной системы наград, которая могла бы кочевать из проекта в проект, была бы очень гибкой и удобной, чтобы я мог в качестве награды использовать вообще любую сущность.
Done!
https://github.com/vavilichev/RewardsSystem
___
#vavilichevgd #gamedev #Unity
Done!
https://github.com/vavilichev/RewardsSystem
___
#vavilichevgd #gamedev #Unity
GitHub
GitHub - vavilichev/RewardsSystem: Simple and flexible system of rewards.
Simple and flexible system of rewards. . Contribute to vavilichev/RewardsSystem development by creating an account on GitHub.
❤1
Урок, посвященный расширениям (Extensions) в C#. Рассказываю на примерах, что это и как этим пользоваться при разработке игр в #unity3d
https://youtu.be/wHnQ4QVjQuc
___
#лр_туториал
https://youtu.be/wHnQ4QVjQuc
___
#лр_туториал
YouTube
Расширения (Extensions) в C#. Рассказываю на примерах в Unity3d, как пользоваться
Поддержи канал, бро!
https://paypal.me/gamedevlavka - мир
https://boosty.to/gamedevlavka - рф
И даже криптой (пока только Ethereum):
0x7a53325D1C36Eea7BbE8C6a8D00f2a0efd580e77
Урок по Unity, посвященный практическим примерам использования расширений (extensions)…
https://paypal.me/gamedevlavka - мир
https://boosty.to/gamedevlavka - рф
И даже криптой (пока только Ethereum):
0x7a53325D1C36Eea7BbE8C6a8D00f2a0efd580e77
Урок по Unity, посвященный практическим примерам использования расширений (extensions)…