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

Сотрудничество/реклама/помощь @Akrus001
Download Telegram
⚡️ 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
string text = null;
Debug.Log(text == null ? "Null" : text.ToUpper());
😁3
Что выведет этот код?
Anonymous Quiz
18%
NULL
52%
Null
12%
null
18%
Ошибка выполнения
Хотите получать информацию о разработке игр? Или же только лайфхаки?
Anonymous Poll
22%
ЛАЙФХАКИ🗡
24%
ИГРЫ💰
54%
и то и другое🎧
433
⚡️ 5 приёмов в C# и Unity, которые предотвращают баги до их появления

📌 Сохрани — пригодится в продакшене, архитектуре и при работе в команде

1️⃣ [SerializeReference] — сериализуемые интерфейсы и абстракции

[SerializeReference]
public IWeapon weapon;

🔧 Позволяет задавать в инспекторе объекты, реализующие интерфейс или базовый класс
💡 Работает с System.Serializable классами, начиная с Unity 2020+
⚠️ Не работает с MonoBehaviour. Нужно использовать ManagedReferenceResolver для удобного выбора объектов.

2️⃣ .asmdef — ускорь сборку проекта и раздели модули

🧩 Делим код на логические сборки: Core, UI, Tools, Editor
Unity пересобирает только изменённые .asmdef, а не весь проект
🔐 Изоляция editor-кода от runtime, контроль зависимостей и unit-тестов

3️⃣ CustomYieldInstruction — читаемые и гибкие паузы в корутинах

public class WaitForHealth : CustomYieldInstruction {
public override bool keepWaiting => Player.Health < 50;
}

// Использование
yield return new WaitForHealth();


🧠 Заменяет while() и вложенные корутины
Удобно для загрузок, триггеров, ожидания событий без сложной логики

4️⃣ ScriptableObject как конфигурация — без копипаста

[CreateAssetMenu]
public class WeaponData : ScriptableObject {
public int damage;
public float range;
}


📦 Расшаривай данные между объектами, сценами и компонентами
🎯 Без GetComponent, без дубликатов — идеально для дизайнеров
💡 Упрощает тестирование и масштабирование

5️⃣ [InitializeOnLoadMethod] — контроль при перезагрузке редактора

[InitializeOnLoadMethod]
private static void OnReload() {
Debug.Log("Editor reloaded");
}


🔁 Сохраняй/восстанавливай состояние редактора, кеши, настройки
🔥 Полезно для плагинов, тулов, Editor-only логики
⚠️ Метод должен быть static. Альтернатива — EditorApplication.playModeStateChanged

🔔 Подписывайся, чтобы не пропустить техники, которые экономят дни разработки
💬 Что используешь из этого? Делись опытом в комментариях!

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