🎮 ТОП-5 книг по Unity и C#, которые стоит прочитать каждому геймдеву
СОХРАНЯЙ ЭТОТ ПОСТ, чтобы не потерять!
👉 Akrus Games | Unity
#сишарп #Unity #GameDev #программирование #IT #книги #полезно
СОХРАНЯЙ ЭТОТ ПОСТ, чтобы не потерять!
1️⃣ Изучаем C# через разработку игр на Unity
Автор: Харрисон Ферроне2️⃣ Unity в действии. Мультиплатформенная разработка на C#
Автор: Джозеф Хокинг3️⃣ Unity и C#. Геймдев от идеи до реализации
Автор: Джереми Гибсон Бонд4️⃣ Разработка игр на Unity 2018 за 24 часа
Автор: Майк Гейг5️⃣ Разработка игры на Unity. С нуля и до реализации
Автор: Дмитрий Денисов
#сишарп #Unity #GameDev #программирование #IT #книги #полезно
Please open Telegram to view this post
VIEW IN TELEGRAM
СОХРАНИ, чтобы не забыть!
🔁 Движение объектов без учёта времени → разная скорость на разных FPS.
transform.Translate(Vector3.forward * speed * Time.deltaTime);
🧊 Не всё должно быть public. Используй SerializeField для инкапсуляции и настройки в инспекторе.
[SerializeField] private float jumpForce;
StartCoroutine(WaitAndShoot());
IEnumerator WaitAndShoot()
{
yield return new WaitForSeconds(1f);
Shoot();
}
Please open Telegram to view this post
VIEW IN TELEGRAM
Обязательно СОХРАНИ, пригодится каждому!
private Player player;
void Start() => player = FindObjectOfType<Player>();
private Rigidbody rb;
void Start() => rb = GetComponent<Rigidbody>();
🧠 Частое создание/удаление = лаги. Используй Object Pooling (пул объектов).
gameObject.SetActive(false);
Please open Telegram to view this post
VIEW IN TELEGRAM
СОХРАНИ, чтобы не потерять контроль над кодом!
Please open Telegram to view this post
VIEW IN TELEGRAM
С первым днём лета! ✋
Надеюсь что вы сможете реализовать все планы!
Летом нет школы и учёбы, поэтому можно все время посвятить программированию!👨💻 🎹
Напишите в комментариях свои планы!
➡️ Akrus Games | Unity
Надеюсь что вы сможете реализовать все планы!
Летом нет школы и учёбы, поэтому можно все время посвятить программированию!
Напишите в комментариях свои планы!
Please open Telegram to view this post
VIEW IN TELEGRAM
Сохрани и не путай больше никогда!
🕹 Update()
⚙️ FixedUpdate()
🎞 LateUpdate()
Please open Telegram to view this post
VIEW IN TELEGRAM
СОХРАНИ, если не хочешь лишних лагов и кривого текста на экране
void Update() {
hpText.text = player.hp.ToString();
}🔻 Обновляется каждый кадр, даже если значение не изменилось
🔻 Нагружает процессор и UI-систему
🔻 Вредит производительности, особенно на мобилках
public Text hpText;
void Start() {
player.OnHealthChanged += UpdateHPText;
}
void UpdateHPText(int hp) {
hpText.text = hp.ToString();
}
✅ UI обновляется только когда нужно
✅ Удобно и масштабируемо
✅ Можно подключать любое количество подписчиков
✅ Если значение меняется постоянно (например, таймер или скорость)
✅ Если UI зависит от времени, позиции и других динамических данных
void Update() {
timerText.text = Mathf.FloorToInt(Time.time).ToString();
}• 🧠 UI обновляем только при изменении данных
• ⚙️ Используем события (Action, delegate)
• 🚀 Update() — только для реально динамических данных
Please open Telegram to view this post
VIEW IN TELEGRAM
Сохрани — пригодится при каждом тесте игры!
📌 Пишет сообщение в консоль.
➕ Отличный способ быстро проверить, вызывается ли код и какие значения у переменных.
🟡 Жёлтое сообщение в консоли.
➕ Удобно для вывода нефатальных ошибок, которые стоит учитывать.
🔴 Красное сообщение.
➕ Используется для критических ошибок, на которые нужно немедленно обратить внимание.
⏸ Приостанавливает выполнение игры в редакторе в момент вызова.
➕ Удобно для анализа состояния объекта в рантайме.
⚠️ Не работает в билде!
🔍 Рисует линии в Scene View во время игры.
➕ Помогает визуализировать направления, трассировку лучей и отладку физики.
⚠️ Линии видны только в Scene View, не в Game View и не в билде.
🔹 БОНУС — Debug.Assert(condition);
🛑 Проверяет условие, и если оно ложно — выводит ошибку и останавливает игру (в редакторе).
➕ Идеально для отладки инвариантов и неожиданных состояний.
💬 Поделись с другом, который не понимает, почему ничего не работает
🔔 Подпишись на канал, чтобы не пропускать мощные фишки по Unity и C#
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5
🔁 Что такое ref и out в C#?
Сохрани — пригодится в любом проекте!
✅ ref — позволяет передать переменную по ссылке и изменить её значение внутри метода.
🔸 Главное: переменная должна быть инициализирована до передачи.
✅ out — тоже передаёт по ссылке, но переменная может быть не инициализирована до вызова.
🔸 Главное: метод обязан присвоить значение переменной до выхода.
🧠 ref vs out — в чём разница?
• ref: переменная уже есть — хочешь изменить её внутри метода
• out: переменной ещё нет — хочешь создать её и вернуть результат
💡 Пример из реальной жизни:
Метод TryParse использует out, чтобы вернуть значение только если операция прошла успешно.
📌 Сохрани — пригодится в любом проекте
🔔 Подпишись на канал, чтобы не пропускать полезные посты по Unity и C#
👉 Akrus Games | Unity
Сохрани — пригодится в любом проекте!
✅ ref — позволяет передать переменную по ссылке и изменить её значение внутри метода.
🔸 Главное: переменная должна быть инициализирована до передачи.
void AddFive(ref int number)
{
number += 5;
}
int x = 10;
AddFive(ref x);
Debug.Log(x); // 👉 выведет 15
✅ out — тоже передаёт по ссылке, но переменная может быть не инициализирована до вызова.
🔸 Главное: метод обязан присвоить значение переменной до выхода.
void GetAnswer(out int result)
{
result = 42;
}
int answer;
GetAnswer(out answer);
Debug.Log(answer); // 👉 выведет 42
🧠 ref vs out — в чём разница?
• ref: переменная уже есть — хочешь изменить её внутри метода
• out: переменной ещё нет — хочешь создать её и вернуть результат
💡 Пример из реальной жизни:
if (int.TryParse("123", out int number))
{
Debug.Log(number); // 👉 123
}Метод TryParse использует out, чтобы вернуть значение только если операция прошла успешно.
📌 Сохрани — пригодится в любом проекте
🔔 Подпишись на канал, чтобы не пропускать полезные посты по Unity и C#
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3 2 2
Сохрани — пригодится на старте, перед собеседованиями и для ежедневной практики!
Подходит и для C#, и для Unity-разработчиков, которым нужно прокачать алгоритмическое мышление
🎯 Решай задачи разного уровня сложности: от новичка до ниндзя
Изучи чужие решения — как бесплатные шпаргалки
Поддерживает C#, JavaScript, Python и многие другие
💼 Алгоритмы и структуры данных, прокачка для собеседований
Часто встречаются задачи, похожие на реальные интервью в топ-компаниях
Есть поддержка C#, Java, Python и др.
🧮 Математические и логические головоломки
Развивает аналитическое мышление и чистое решение в коде
Особенно полезен, если хочешь писать «чисто и красиво» даже в Unity
👨🏫 Пошаговая практика по языкам — включая C#
Каждая задача сопровождается фидбеком от менторов
Простой интерфейс, хорош для системной прокачки
⚔️ Самая активная соревновательная платформа по алгоритмам
Регулярные турниры, рейтинги, реальные челленджи
Поддерживает C#, C++, Python — отличная тренировка логики и скорости
Please open Telegram to view this post
VIEW IN TELEGRAM
Всем привет!
Хочу порекомендовать канал моего знакомого — Timm Studio! На этом канале вы можете наблюдать за процессом создания игр, поддерживать его и следить за его контентом. На этом канале будет выходить много интересного контента, а также чтобы вы могли сразу увидеть его работы, я скину пару примеров! в общем если вам интересно , ПОДПИСЫВАЙТЕСЬ
https://t.me/ITimGameStudio <<<
Хочу порекомендовать канал моего знакомого — Timm Studio! На этом канале вы можете наблюдать за процессом создания игр, поддерживать его и следить за его контентом. На этом канале будет выходить много интересного контента, а также чтобы вы могли сразу увидеть его работы, я скину пару примеров! в общем если вам интересно , ПОДПИСЫВАЙТЕСЬ
https://t.me/ITimGameStudio <<<
1🔥6❤1😱1 1 1
Сохрани — чтобы писать как PRO 🧼
MovePlayer(), SaveData() — названия должны описывать то, что делает функция. Это сразу видно без чтения тела метода.
❌ if (health < 30)
✅ if (health < lowHealthThreshold)
➡️ Используй константы или переменные с понятными именами — это повышает читаемость и упрощает поддержку.
❌ Всё в одном Player.cs
✅ PlayerMovement.cs, PlayerShooting.cs, PlayerUI.cs
➡️ Разделяй логику по принципу SRP — каждый класс делает только своё. Это упростит тестирование и повторное использование.
Если ты пишешь одинаковый код более 2 раз — вынеси его в отдельный метод.
Чистота = переиспользуемость.
❌ // Увеличиваем счёт
✅ // Начисляем очки за попадание в голову
➡️ Комментарий должен объяснять почему, а не что и так видно из кода.
📌 Пиши так, чтобы код был понятен тебе через 3 месяца
💬 А ты комментируешь свой код? Напиши честно
🔔 Подпишись, чтобы прокачивать C# и Unity до уровня senior
Please open Telegram to view this post
VIEW IN TELEGRAM
Сохрани — пригодится даже опытным разработчикам.
Debug.Log(nameof(Player)); // "Player"
🔸 Помогает избежать опечаток и ломания при рефакторинге. Работает с классами, методами, переменными.
[ContextMenu("Reset Settings")]
private void ResetSettings() {
// Применяется без запуска игры
}🛠 Работает только в MonoBehaviour, не поддерживает static. Удобно для генерации данных, сбросов, ручного теста.
if (TryGetComponent<Rigidbody>(out var rb)) {
rb.AddForce(Vector3.up * 10);
}🚀 Безопаснее GetComponent<T>() != null. Избегает двойного поиска и чище читается. С Unity 2020.1+
[System.Flags]
public enum WeaponType {
None = 0,
Sword = 1,
Bow = 2,
Magic = 4
}
// Пример использования:
var myWeapon = WeaponType.Sword | WeaponType.Magic;
if ((myWeapon & WeaponType.Magic) != 0) {
Debug.Log("Magic enabled");
}
💡 Удобно для фильтров, состояний, прав. Избегайте HasFlag — он медленнее.
void OnValidate() {
damage = Mathf.Max(0, damage);
}🧪 Вызывается при изменении полей в инспекторе. Удобно для базовой валидации и UI-обновлений. Не перегружайте тяжёлыми операциями.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5 2 2❤1 1
int a = 10;
int b = 5;
int result = a > b ? a - b : b - a;
Debug.Log(result);
Forwarded from Akrus Games | Unity (Egor)
playerName ??= "Guest";
🔧 Если playerName — null, присваивается “Guest”.
Чище, чем обычная проверка.
💡 Работает с ссылочными и nullable типами (C# 8.0+).
void Update() {
if (!Application.isPlaying) return;
// Работает только в Play Mode
}⚙️ Избегай выполнения лишнего в редакторе.
Полезно в Update, OnValidate, Awake, Start, корутинах и редакторских скриптах.
[MenuItem("Tools/Quick Play _F5")]
private static void QuickPlay() {
EditorApplication.isPlaying = !EditorApplication.isPlaying;
}💡 Создай свои тулзы с быстрым доступом.
Поддерживает комбинации: Ctrl+Shift+R (Windows).
public readonly struct DamageInfo {
public readonly int Value;
public readonly Vector3 Direction;
}⚡ Без лишних аллокаций, идеально для ECS, Burst, инвариантных данных.
💬 В обычных MonoBehaviour-скриптах не всегда критично.
[Header("Настройки урона")]
[Range(0, 100)] public int damage;
[Tooltip("Урон по зоне — например, огонь или яд")]
public bool isArea;🧼 Повышает читаемость инспектора.
Меньше вопросов от команды → меньше багов.
💡 Добавь ещё [Space] для разделения блоков.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3❤2 1 1