Akrus Games | Unity
2.95K subscribers
408 photos
89 videos
11 files
351 links
Самые годные лайфхаки по unity c#

Сотрудничество/реклама/помощь @Akrus001
Download Telegram
🎮 ТОП-5 книг по Unity и C#, которые стоит прочитать каждому геймдеву

СОХРАНЯЙ ЭТОТ ПОСТ, чтобы не потерять!

1️⃣ Изучаем C# через разработку игр на Unity
Автор: Харрисон Ферроне

2️⃣ Unity в действии. Мультиплатформенная разработка на C#
Автор: Джозеф Хокинг

3️⃣ Unity и C#. Геймдев от идеи до реализации
Автор: Джереми Гибсон Бонд

4️⃣ Разработка игр на Unity 2018 за 24 часа
Автор: Майк Гейг

5️⃣ Разработка игры на Unity. С нуля и до реализации
Автор: Дмитрий Денисов


👉Akrus Games | Unity

#сишарп #Unity #GameDev #программирование #IT #книги #полезно
Please open Telegram to view this post
VIEW IN TELEGRAM
43🤯21111
⚡️ ТОП-5 ошибок новичков в Unity и C#
СОХРАНИ, чтобы не забыть!

1️⃣ Забывают про Time.deltaTime
🔁 Движение объектов без учёта времени → разная скорость на разных FPS.

transform.Translate(Vector3.forward * speed * Time.deltaTime);


2️⃣ Всё в Update()
Слишком много логики в Update() → лаги.
Разноси по методам: физику в FixedUpdate(), UI в LateUpdate().


3️⃣ Игнорируют SerializeField
🧊 Не всё должно быть public. Используй SerializeField для инкапсуляции и настройки в инспекторе.

[SerializeField] private float jumpForce;


4️⃣ Не используют StartCoroutine()
Ждёшь паузы? Забудь про таймеры — корутины решают!

StartCoroutine(WaitAndShoot());

IEnumerator WaitAndShoot()
{
yield return new WaitForSeconds(1f);
Shoot();
}



5️⃣ Не структурируют проект
🗂 Бардак в папках — ад в будущем.
Раздели проект:
📁 Scripts / Prefabs / Scenes / Materials / UI — порядок спасает проект и нервы!


💡 Поделись с другом, который только начал изучать Unity!
📌 СОХРАНИ этот пост — потом скажешь спасибо 😉
🔔 Подпишись на канал, чтобы не пропускать годные посты по Unity и C#


👉Akrus Games | Unity
Please open Telegram to view this post
VIEW IN TELEGRAM
43221
⚡️ ТОП-5 советов по производительности в Unity

Обязательно СОХРАНИ, пригодится каждому!

1️⃣ Избегай FindObjectOfType() в Update()
🚫 Это очень медленно. Используй ссылки или кешируй:

private Player player;
void Start() => player = FindObjectOfType<Player>();

2️⃣ Сократи использование GetComponent
Получи компонент один раз и сохрани ссылку:

private Rigidbody rb;
void Start() => rb = GetComponent<Rigidbody>();


3️⃣ Пул объектов вместо Instantiate/Destroy
🧠 Частое создание/удаление = лаги. Используй Object Pooling (пул объектов).

4️⃣ Отключай неиспользуемые объекты, а не удаляй

gameObject.SetActive(false);


📌 Быстрее и проще для повторного использования.

5️⃣ Используй FixedUpdate() только для физики
Всё остальное — в Update() или LateUpdate(). Не путайся.


🔥 СОХРАНИ, чтобы потом не лагало!
💡 Делись с друзьями, которые жалуются на тормоза
🔔 Подпишись на канал, чтобы не пропускать годные посты по Unity и C#

👉Akrus Games | Unity
Please open Telegram to view this post
VIEW IN TELEGRAM
422
⚡️ 5 признаков того, что твой Unity-проект начинает разваливаться

СОХРАНИ, чтобы не потерять контроль над кодом!


1️⃣ Все скрипты ссылаются друг на друга напрямую
➡️ Это антипаттерн. Делай слабую связанность через Events, ScriptableObjects или интерфейсы.


2️⃣ Ты боишься что-либо менять, потому что «всё сломается»
➡️ Значит, архитектура неустойчива. Вводи систему состояний, дели логику на модули.


3️⃣ Ты забыл, за что отвечает какой скрипт
➡️ У каждой компоненты должна быть одна зона ответственности. Названия скриптов — понятные.

4️⃣ В каждом скрипте Update()
➡️ Слишком много Update() — лаги и каша. Раздели логику на события, таймеры, корутины.


5️⃣ Ты думаешь “и так сойдёт”
➡️ Не сойдёт 😅 Пиши с расчётом на рост и расширение проекта.


🔥 СОХРАНИ этот чеклист и пересмотри свой проект
🔔 Подпишись на канал, чтобы не пропускать такие разборы

👉Akrus Games | Unity
Please open Telegram to view this post
VIEW IN TELEGRAM
321
С первым днём лета!
Надеюсь что вы сможете реализовать все планы!
Летом нет школы и учёбы, поэтому можно все время посвятить программированию!👨‍💻🎹

Напишите в комментариях свои планы!

➡️Akrus Games | Unity
Please open Telegram to view this post
VIEW IN TELEGRAM
3🔥1
⚡️ Mini-шпаргалка: Разница между Update(), FixedUpdate() и LateUpdate()

Сохрани и не путай больше никогда!

🕹 Update()
📌 Каждый кадр (зависит от FPS)
Обработка ввода, UI, логика

⚙️ FixedUpdate()
📌 Каждые X мс (независимо от FPS)
Физика, Rigidbody, силы

🎞 LateUpdate()
📌 После всех Update()
Камера, анимации, позиционирование после логики

Используй Update() для ввода
FixedUpdate() — для физики
LateUpdate() — для камеры и следящих объектов

🔔 Подпишись, если хочешь больше таких мини-шпаргалок!

👉Akrus Games | Unity
Please open Telegram to view this post
VIEW IN TELEGRAM
543
⚡️ Как правильно обновлять UI в Unity

СОХРАНИ, если не хочешь лишних лагов и кривого текста на экране

Плохой способ:

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 обновляется только когда нужно
Удобно и масштабируемо
Можно подключать любое количество подписчиков

☝️ Когда можно использовать Update()?

Если значение меняется постоянно (например, таймер или скорость)
Если UI зависит от времени, позиции и других динамических данных

void Update() {
timerText.text = Mathf.FloorToInt(Time.time).ToString();
}


📌 РЕЗЮМЕ:
🧠 UI обновляем только при изменении данных
⚙️ Используем события (Action, delegate)
🚀 Update() — только для реально динамических данных

🔥 СОХРАНИ, чтобы твой UI не тормозил
💬 Поделись с другом, который пишет text = ... в каждом кадре
🔔 Подпишись на канал, чтобы не пропускать мощные посты по Unity и C#

👉Akrus Games | Unity
Please open Telegram to view this post
VIEW IN TELEGRAM
543🎄1
⚙️ 5+1 ПОЛЕЗНЫХ КОМАНД ДЛЯ ОТЛАДКИ В UNITY

Сохрани — пригодится при каждом тесте игры!

1️⃣ Debug.Log("Текст");

📌 Пишет сообщение в консоль.
Отличный способ быстро проверить, вызывается ли код и какие значения у переменных.

2️⃣ Debug.LogWarning("Предупреждение");

🟡 Жёлтое сообщение в консоли.
Удобно для вывода нефатальных ошибок, которые стоит учитывать.

3️⃣ Debug.LogError("Ошибка");

🔴 Красное сообщение.
Используется для критических ошибок, на которые нужно немедленно обратить внимание.

4️⃣ Debug.Break();

Приостанавливает выполнение игры в редакторе в момент вызова.
Удобно для анализа состояния объекта в рантайме.
⚠️ Не работает в билде!

5️⃣ Debug.DrawRay() и Debug.DrawLine()

🔍 Рисует линии в Scene View во время игры.
Помогает визуализировать направления, трассировку лучей и отладку физики.
⚠️ Линии видны только в Scene View, не в Game View и не в билде.


🔹 БОНУС — Debug.Assert(condition);

🛑 Проверяет условие, и если оно ложно — выводит ошибку и останавливает игру (в редакторе).
Идеально для отладки инвариантов и неожиданных состояний.

💬 Поделись с другом, который не понимает, почему ничего не работает
🔔 Подпишись на канал, чтобы не пропускать мощные фишки по Unity и C#

👉Akrus Games | Unity
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5
int a = 5;
int b = a;
b += 2;
Debug.Log(a);
ЧТО ВЫВЕДЕТСЯ В КОНСОЛЬ?
Anonymous Quiz
25%
7
62%
5
2%
0
11%
Ошибка компиляции
🔁 Что такое ref и out в C#?

Сохрани — пригодится в любом проекте!

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#

👉Akrus Games | Unity
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥322
int a = 3;
int b = 4;
int result = a + b * 2;

Debug.Log(result);
Что выведет код?
Anonymous Quiz
27%
14
68%
11
1%
16
4%
7
4🤯22😱1
⚡️ 5 сайтов, где ты реально прокачаешь программирование

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

1️⃣ Codewars

🎯 Решай задачи разного уровня сложности: от новичка до ниндзя
Изучи чужие решения — как бесплатные шпаргалки
Поддерживает C#, JavaScript, Python и многие другие

2️⃣ LeetCode

💼 Алгоритмы и структуры данных, прокачка для собеседований
Часто встречаются задачи, похожие на реальные интервью в топ-компаниях
Есть поддержка C#, Java, Python и др.

3️⃣ Project Euler

🧮 Математические и логические головоломки
Развивает аналитическое мышление и чистое решение в коде
Особенно полезен, если хочешь писать «чисто и красиво» даже в Unity

4️⃣ Exercism

👨‍🏫 Пошаговая практика по языкам — включая C#
Каждая задача сопровождается фидбеком от менторов
Простой интерфейс, хорош для системной прокачки

5️⃣ Codeforces

⚔️ Самая активная соревновательная платформа по алгоритмам
Регулярные турниры, рейтинги, реальные челленджи
Поддерживает C#, C++, Python — отличная тренировка логики и скорости

😵 Практикуй хотя бы по 1 задаче в день, и уже через месяц заметишь результат!
📌 Сохрани, чтобы не искать заново
🔔 Подпишись на канал, чтобы не пропустить топовые ресурсы и фишки по C# и Unity
💬 А где прокачиваешься ты? Делись в комментариях!

👉Akrus Games | Unity
Please open Telegram to view this post
VIEW IN TELEGRAM
522🔥11
Всем привет!

Хочу порекомендовать канал моего знакомого — Timm Studio! На этом канале вы можете наблюдать за процессом создания игр, поддерживать его и следить за его контентом. На этом канале будет выходить много интересного контента, а также чтобы вы могли сразу увидеть его работы, я скину пару примеров! в общем если вам интересно , ПОДПИСЫВАЙТЕСЬ
https://t.me/ITimGameStudio <<<
1🔥61😱111
⚡️ 5 приёмов, которые делают твой код чище

Сохрани — чтобы писать как PRO 🧼

1️⃣ Именуй функции как действия

MovePlayer(), SaveData() — названия должны описывать то, что делает функция. Это сразу видно без чтения тела метода.

2️⃣ Избавляйся от магических чисел

if (health < 30)
if (health < lowHealthThreshold)

➡️ Используй константы или переменные с понятными именами — это повышает читаемость и упрощает поддержку.

3️⃣ Одна ответственность — один скрипт / компонент

Всё в одном Player.cs
PlayerMovement.cs, PlayerShooting.cs, PlayerUI.cs

➡️ Разделяй логику по принципу SRP — каждый класс делает только своё. Это упростит тестирование и повторное использование.

4️⃣ Избавляйся от дублирования

Если ты пишешь одинаковый код более 2 раз — вынеси его в отдельный метод.
Чистота = переиспользуемость.

5️⃣ Комментируй то, что не очевидно

// Увеличиваем счёт
// Начисляем очки за попадание в голову

➡️ Комментарий должен объяснять почему, а не что и так видно из кода.

📌 Пиши так, чтобы код был понятен тебе через 3 месяца
💬 А ты комментируешь свой код? Напиши честно
🔔 Подпишись, чтобы прокачивать C# и Unity до уровня senior

👉Akrus Games | Unity
Please open Telegram to view this post
VIEW IN TELEGRAM
7321🔥11
⚡️ 5 полезных приёмов в C# и Unity, которые экономят часы отладки

Сохрани — пригодится даже опытным разработчикам.

1️⃣ nameof() — безопасные строки

Debug.Log(nameof(Player)); // "Player"


🔸 Помогает избежать опечаток и ломания при рефакторинге. Работает с классами, методами, переменными.

2️⃣ [ContextMenu] — кнопка прямо в инспекторе

[ContextMenu("Reset Settings")]
private void ResetSettings() {
// Применяется без запуска игры
}


🛠 Работает только в MonoBehaviour, не поддерживает static. Удобно для генерации данных, сбросов, ручного теста.

3️⃣ TryGetComponent<T>() — безопасно и чисто

if (TryGetComponent<Rigidbody>(out var rb)) {
rb.AddForce(Vector3.up * 10);
}


🚀 Безопаснее GetComponent<T>() != null. Избегает двойного поиска и чище читается. С Unity 2020.1+

4️⃣ [System.Flags] — для комбинируемых enum’ов

[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 — он медленнее.

5️⃣ OnValidate() — авто-валидация в редакторе

void OnValidate() {
damage = Mathf.Max(0, damage);
}


🧪 Вызывается при изменении полей в инспекторе. Удобно для базовой валидации и UI-обновлений. Не перегружайте тяжёлыми операциями.

📌 Подписывайся, если хочешь писать понятный, надёжный код в Unity и C#
💬 Используешь что-то из этого? Делись опытом 👇

👉Akrus Games | Unity
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥52211
int a = 10;
int b = 5;
int result = a > b ? a - b : b - a;

Debug.Log(result);
Forwarded from Akrus Games | Unity (Egor)
Что выведет этот код?
Anonymous Quiz
52%
5
12%
-5
15%
True
21%
Ошибка компиляции
4🤯3
⚡️ 5 приёмов C# и Unity, которые делают код мощнее и чище

📌 Сохрани — пригодятся даже в продакшене

1️⃣ ??= — установка значения по умолчанию

playerName ??= "Guest";


🔧 Если playerName — null, присваивается “Guest”.
Чище, чем обычная проверка.
💡 Работает с ссылочными и nullable типами (C# 8.0+).

2️⃣ Application.isPlaying — защита от логики в редакторе

void Update() {
if (!Application.isPlaying) return;
// Работает только в Play Mode
}


⚙️ Избегай выполнения лишнего в редакторе.
Полезно в Update, OnValidate, Awake, Start, корутинах и редакторских скриптах.

3️⃣ [MenuItem] с горячей клавишей

[MenuItem("Tools/Quick Play _F5")]
private static void QuickPlay() {
EditorApplication.isPlaying = !EditorApplication.isPlaying;
}


💡 Создай свои тулзы с быстрым доступом.
Поддерживает комбинации: Ctrl+Shift+R (Windows).

4️⃣ readonly struct — максимум производительности

public readonly struct DamageInfo {
public readonly int Value;
public readonly Vector3 Direction;
}


Без лишних аллокаций, идеально для ECS, Burst, инвариантных данных.
💬 В обычных MonoBehaviour-скриптах не всегда критично.

5️⃣ [Header], [Range], [Tooltip] — читаемый инспектор

[Header("Настройки урона")]
[Range(0, 100)] public int damage;
[Tooltip("Урон по зоне — например, огонь или яд")]
public bool isArea;


🧼 Повышает читаемость инспектора.
Меньше вопросов от команды → меньше багов.
💡 Добавь ещё [Space] для разделения блоков.

🔔 Подписывайся, если хочешь писать Unity-код как профи
💬 А ты используешь это у себя? Делись в комментах 👇

👉Akrus Games | Unity
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3211