✅ C# Атрибуты в Unity: мета-инструкции для кода
Что это?
Специальные метки для классов, переменных или методов. Они дают подсказки движку и редактору Unity, как с ними работать.
Зачем?
- Делать переменные видимыми в Инспекторе без ключевого слова
- Задавать диапазоны значений для ползунка
- Добавлять в контекстное меню кнопки для вызова методов
- Скрывать ненужные поля в Инспекторе
Как использовать?
Просто напиши имя атрибута в квадратных скобках
Популярные атрибуты:
Показывает
Создает ползунок для значения.
Добавляет заголовок в Инспектор.
Показывает текст при наведении курсора.
Прячет
Важно!
Атрибуты не меняют логику кода, а только управляют его отображением и поведением в редакторе Unity. Еще в поля можно писать только константы, не переменные!
💡 Используй, чтобы сделать процесс настройки объектов интуитивным и удобным.
Пост попросил @Cheeeeeeeb
#Unity #Unity3D #CSharp #Атрибуты #Gamedevelopment
Что это?
Специальные метки для классов, переменных или методов. Они дают подсказки движку и редактору Unity, как с ними работать.
Зачем?
- Делать переменные видимыми в Инспекторе без ключевого слова
public- Задавать диапазоны значений для ползунка
- Добавлять в контекстное меню кнопки для вызова методов
- Скрывать ненужные поля в Инспекторе
Как использовать?
Просто напиши имя атрибута в квадратных скобках
[] перед элементом.Популярные атрибуты:
[SerializeField] Показывает
private поле в Инспекторе.[SerializeField] private int _health;
[Range(min, max)] Создает ползунок для значения.
[Range(0f, 10f)] public float speed;
[Header("Название")] Добавляет заголовок в Инспектор.
[Header("Player Settings")]
public int playerScore;[Tooltip("Подсказка")] Показывает текст при наведении курсора.
[Tooltip("Сила прыжка в ньютонах")]
public float jumpForce;[HideInInspector] Прячет
public поле из Инспектора.[HideInInspector] public bool isGrounded;
Важно!
Атрибуты не меняют логику кода, а только управляют его отображением и поведением в редакторе Unity. Еще в поля можно писать только константы, не переменные!
💡 Используй, чтобы сделать процесс настройки объектов интуитивным и удобным.
Пост попросил @Cheeeeeeeb
#Unity #Unity3D #CSharp #Атрибуты #Gamedevelopment
🔥12❤2 1 1
✅ Pattern Matching в C#: Property и Tuple patterns
Зачем?
Упростить проверки сложных условий. Вместо вложенных
Property pattern
Проверяет свойства объекта прямо в условии:
Tuple pattern
Идеален для проверки нескольких значений одновременно:
Где использовать?
• Вместо громоздких
• Для обработки входных данных (например, результат метода)
• В
Важно!
• Работает в
•
• В property pattern можно проверять вложенные свойства:
💡 Используй эти паттерны для чистого и безопасного кода. Сокращай количество строк и повышай читаемость!
Пост предложил @u006E10011
#CSharp #Unity #Programming #PatternMatching #UnityDev
Зачем?
Упростить проверки сложных условий. Вместо вложенных
if — чистый и читаемый код.Property pattern
Проверяет свойства объекта прямо в условии:
if (weapon is { Ammo: 0, IsReloading: false })
{
// Оружие без патронов и не перезаряжается:
StartReload();
}Tuple pattern
Идеален для проверки нескольких значений одновременно:
string result = (x, y) switch
{
(0, 0) => "Точка в начале координат",
( > 0, > 0) => "Точка в первой четверти",
( < 0, _) => "Точка слева от оси Y", // _ — любое значение
_ => "Точка в другой области"
};
Где использовать?
• Вместо громоздких
if/else для состояний объекта • Для обработки входных данных (например, результат метода)
• В
switch выражениях для возврата значений Важно!
• Работает в
is, switch и switch-выражениях (как выше) •
_ — это discard (игнорирование значения) • В property pattern можно проверять вложенные свойства:
Player { Health: { Current: 0 } } 💡 Используй эти паттерны для чистого и безопасного кода. Сокращай количество строк и повышай читаемость!
Пост предложил @u006E10011
#CSharp #Unity #Programming #PatternMatching #UnityDev
❤8🔥3 1
✅ Кастомные атрибуты в C#: твой код — чище и умнее
Что это?
Специальные метки для переменных, методов или классов. Они не меняют логику, но дают подсказки движку или редактору.
Зачем?
• Валидация данных прямо в инспекторе
• Красивое и логичное группирование полей
• Сокрытие или запрет на редактирование переменных при определенных условиях
• Автоматизация рутинных задач
Как создать?
Наследуйся от класса
Как использовать?
Повесь атрибут над полей класса.
Важно!
• Для отрисовки в инспекторе нужен кастомный Editor скрипт
• Атрибуты работают в рантайме — это мощный инструмент для архитектуры
• Не злоупотребляй сложной логикой в атрибутах
💡 Применяй для: создания понятных инспекторов, валидации настроек, автоматизации.
Создай свой первый атрибут для подсветки поля, если значение отрицательное!
#Unity #CSharp #Programming #Attributes #Gamedev
Что это?
Специальные метки для переменных, методов или классов. Они не меняют логику, но дают подсказки движку или редактору.
Зачем?
• Валидация данных прямо в инспекторе
• Красивое и логичное группирование полей
• Сокрытие или запрет на редактирование переменных при определенных условиях
• Автоматизация рутинных задач
Как создать?
Наследуйся от класса
PropertyAttribute.using UnityEngine;
public class HeaderColorAttribute : PropertyAttribute
{
public readonly Color Color;
public HeaderColorAttribute(float r, float g, float b)
{
Color = new Color(r, g, b);
}
}
Как использовать?
Повесь атрибут над полей класса.
public class Player : MonoBehaviour
{
[HeaderColor(1, 0, 0)] // Красный заголовок
[SerializeField] private string _playerName;
[HeaderColor(0, 1, 0)] // Зеленый заголовок
[SerializeField] private int _health;
}
Важно!
• Для отрисовки в инспекторе нужен кастомный Editor скрипт
• Атрибуты работают в рантайме — это мощный инструмент для архитектуры
• Не злоупотребляй сложной логикой в атрибутах
💡 Применяй для: создания понятных инспекторов, валидации настроек, автоматизации.
Создай свой первый атрибут для подсветки поля, если значение отрицательное!
#Unity #CSharp #Programming #Attributes #Gamedev
1🔥5❤2 1
Please open Telegram to view this post
VIEW IN TELEGRAM
1😁14 6🔥2 2😱1
This media is not supported in your browser
VIEW IN TELEGRAM
⚡️ Разработчики игр, внимание!
Kenney Assets собрал сотни бесплатных 2D и 3D ассетов в одном месте — всё, что нужно для быстрого старта проектов:
1️⃣ Текстуры
2️⃣ Спрайты
3️⃣ Звуки
4️⃣ Шрифты
5️⃣ Модели для VR/AR
🎧 Лицензия полностью открытая — используйте в любых проектах, включая коммерческие. Библиотека постоянно обновляется и доступна всем желающим!
👉 Ссылка на библиотеку
Kenney Assets собрал сотни бесплатных 2D и 3D ассетов в одном месте — всё, что нужно для быстрого старта проектов:
1️⃣ Текстуры
2️⃣ Спрайты
3️⃣ Звуки
4️⃣ Шрифты
5️⃣ Модели для VR/AR
👉 Ссылка на библиотеку
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9
Please open Telegram to view this post
VIEW IN TELEGRAM
😁19❤5🔥1
Я заметил: чем меньше постов, тем больше реакций. 😱
Может мне вообще посты не писать?
https://t.me/AkrusUnity/600 реакций накидайте, мем же
Может мне вообще посты не писать?
Извините что не было поста сегодня, я отдыхал☕️
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
42😁11🎄6 5 2 1 1
😱 Находка недели для вас, друзья!
Канал лампового инди, посвященный разработке игр: @TheRoom606
Автор пробует много разного и регулярно публикует посты об этом: от написания игрушек самому с нуля, до вайб-кодинга и заказа разработки.
Подписывайся на канал:
https://t.me/TheRoom606
Канал лампового инди, посвященный разработке игр: @TheRoom606
Автор пробует много разного и регулярно публикует посты об этом: от написания игрушек самому с нуля, до вайб-кодинга и заказа разработки.
Подписывайся на канал:
https://t.me/TheRoom606
❤4🎄4 2 1 1
✅ Паттерн «Состояние» (State): Умное управление поведением
Что это?
Паттерн, который позволяет объекту изменять свое поведение в зависимости от внутреннего состояния. Как режимы работы устройства.
Зачем?
• Избегать гигантских конструкций
• Четко разделять логику разных состояний
• Упрощать добавление новых состояний
Как работает?
1. Создаешь интерфейс состояния (IState) с методами Enter(), Update(), Exit()
2. Реализуешь конкретные состояния (например, IdleState, MoveState, AttackState)
3. Создаешь класс StateMachine, который управляет текущим состоянием
Пример: Простая машина состояний врага
Важно!
• Каждое состояние отвечает только за свою логику
• Переход между состояниями происходит в одном месте (StateMachine)
• Отлично сочетается с другими паттернами (например, Command)
💡 Применяй для: ИИ врагов, анимаций, управления игроком (бег, прыжок, атака).
#Unity #CSharp #Patterns #StateMachine #GameDev
Что это?
Паттерн, который позволяет объекту изменять свое поведение в зависимости от внутреннего состояния. Как режимы работы устройства.
Зачем?
• Избегать гигантских конструкций
switch или if-else • Четко разделять логику разных состояний
• Упрощать добавление новых состояний
Как работает?
1. Создаешь интерфейс состояния (IState) с методами Enter(), Update(), Exit()
2. Реализуешь конкретные состояния (например, IdleState, MoveState, AttackState)
3. Создаешь класс StateMachine, который управляет текущим состоянием
Пример: Простая машина состояний врага
// 1. Интерфейс состояния
public interface IEnemyState
{
void Enter();
void Update();
void Exit();
}
// 2. Конкретное состояние - Преследование
public class ChaseState : IEnemyState
{
public void Enter() { Debug.Log("Начинаю преследование!"); }
public void Update() { /* Логика движения к игроку */ }
public void Exit() { Debug.Log("Прекращаю преследование."); }
}
// 3. Машина состояний
public class EnemyAI : MonoBehaviour
{
IEnemyState currentState;
public void ChangeState(IEnemyState newState)
{
currentState?.Exit();
currentState = newState;
currentState?.Enter();
}
void Update()
{
currentState?.Update();
}
}
// Использование:
EnemyAI ai = GetComponent<EnemyAI>();
ai.ChangeState(new ChaseState());
Важно!
• Каждое состояние отвечает только за свою логику
• Переход между состояниями происходит в одном месте (StateMachine)
• Отлично сочетается с другими паттернами (например, Command)
💡 Применяй для: ИИ врагов, анимаций, управления игроком (бег, прыжок, атака).
#Unity #CSharp #Patterns #StateMachine #GameDev
❤6🎄4🤯2
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6 3❤2😁1 1
💧 Шейдеры воды в Unity: основы создания
Что это?
Вертексные и фрагментные шейдеры, которые создают иллюзию воды. Они манипулируют геометрией и цветом объекта, чтобы симулировать волны, прозрачность и отражения.
С чего начать?
1. Создай новый шейдер (Unlit Shader) – он проще для начала.
2. Работай через Shader Graph (визуальный редактор) или пиши код вручную.
Основные компоненты:
• Вертексное смещение: Сдвигает вершины меша по синусоиде для создания волн.
• Нормали: Специальная текстура (Normal Map) для имитации ряби и бликов.
• Прозрачность (Alpha): Настройка параметров альфа-канала и рендера.
• Отражения (Cubemap / Reflection Probe): Добавляют реалистичные блики от окружения.
Простой код волн (в вертексном шейдере):
Как сделать воду визуально appealing?
1. Добавь текстуру нормалей для мелкой ряби.
2. Используй параметр _Time чтобы анимировать смещение текстур.
3. Настрой прозрачность через альфа-канал.
4. Добавь Reflection Probe на сцену для реалистичных отражений.
Важно!
• Для стилизованной графики хватит простого шейдера с синусоидой.
• Для реализма используй более сложные шейдеры с текстурами нормалей, Fresnel эффектом (затухание на глубине) и параллаксом.
• Всегда тестируй при разном освещении!
💡 Применяй для: океанов, луж, магических порталов, любых водных поверхностей.
Пробуй, экспериментируй с параметрами — идеальной формулы нет!
Ссылки https://github.com/Unity-Technologies/BoatAttack
#Unity #Unity3D #Shader #WaterShader #GameDev
Что это?
Вертексные и фрагментные шейдеры, которые создают иллюзию воды. Они манипулируют геометрией и цветом объекта, чтобы симулировать волны, прозрачность и отражения.
С чего начать?
1. Создай новый шейдер (Unlit Shader) – он проще для начала.
2. Работай через Shader Graph (визуальный редактор) или пиши код вручную.
Основные компоненты:
• Вертексное смещение: Сдвигает вершины меша по синусоиде для создания волн.
• Нормали: Специальная текстура (Normal Map) для имитации ряби и бликов.
• Прозрачность (Alpha): Настройка параметров альфа-канала и рендера.
• Отражения (Cubemap / Reflection Probe): Добавляют реалистичные блики от окружения.
Простой код волн (в вертексном шейдере):
v.vertex.y += sin(_Time.y * _WaveSpeed + v.vertex.x * _WaveFrequency) * _WaveHeight;
Как сделать воду визуально appealing?
1. Добавь текстуру нормалей для мелкой ряби.
2. Используй параметр _Time чтобы анимировать смещение текстур.
3. Настрой прозрачность через альфа-канал.
4. Добавь Reflection Probe на сцену для реалистичных отражений.
Важно!
• Для стилизованной графики хватит простого шейдера с синусоидой.
• Для реализма используй более сложные шейдеры с текстурами нормалей, Fresnel эффектом (затухание на глубине) и параллаксом.
• Всегда тестируй при разном освещении!
💡 Применяй для: океанов, луж, магических порталов, любых водных поверхностей.
Пробуй, экспериментируй с параметрами — идеальной формулы нет!
Ссылки https://github.com/Unity-Technologies/BoatAttack
#Unity #Unity3D #Shader #WaterShader #GameDev
❤10
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5😁2🎄1
Сохрани — пригодится даже опытным разработчикам.
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 — он медленнее.
5️⃣ OnValidate() — авто-валидация в редакторе
void OnValidate() {
damage = Mathf.Max(0, damage);
}🧪 Вызывается при изменении полей в инспекторе. Удобно для базовой валидации и UI-обновлений. Не перегружайте тяжёлыми операциями.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4🎄1
This media is not supported in your browser
VIEW IN TELEGRAM
Игра подписчика @OpenProgrammer!
Продолжаю разработку игры PixelMine!
Pixel Mine это 2д ММОРПГ с милой пиксельной графикой.
Планируются различные квесты, свободное исследование мира, крафт и получение вещей, ивенты, торговля между игроками и многое другое...
--- --- --- --- --- --- ---
За эту неделю:
• Улучшен чат
• Добавлена новая механика - клады
• Добавлены новые предметы, а так же квесты
• Происходит доработка игры под веб
--- --- --- --- --- --- ---
ТГ канал: ТЫК!
Впереди ещё много интересного, подписывайтесь чтобы поучаствовать в бета тесте, и не пропускать новые обновления!
🔥9
✅ Unity: Мощные инструменты анимации
Blend Trees (Деревья смешивания)
Что это? Инструмент для плавного перехода между несколькими анимациями на основе параметров (например, скорость или направление).
Зачем?
• Создать бесшовный переход от ходьбы к бегу.
• Реализовать движение в 8 направлениях (как в старых RPG).
• Контролировать анимацию поворота на месте.
Как работает?
1. Создаешь Blend Tree внутри State Machine.
2. Добавляешь в него анимации (например, idle, walk, run).
3. Выбираешь параметр для смешивания (чаще всего
4. Настраиваешь threshold (значение параметра, при котором проигрывается конкретная анимация).
Пример:
Animation Layers и Avatar Masks
Слои анимации позволяют проигрывать несколько анимаций одновременно поверх основной.
Маски аватора определяют, какие части скелета затрагивает слой.
Зачем?
• Верхний слой (Upper Body): Анимация стрельбы или жестов, чтобы не прерывать анимацию ног.
• Слой лица (Face Layer): Мимика и речь, независимые от тела.
• Слой инвентаря: Анимация доставания оружия или использования предмета.
Как настроить?
1. В контроллере анимаций добавляешь новый слой.
2. Назначаешь ему Avatar Mask (например, "UpperBody").
3. Выставляешь Weight (сила влияния слоя) и Blending (аддитивный или поверхностный).
Any State
Что это? Особое состояние, которое есть в любом месте State Machine.
Зачем? Позволяет перейти в определенное состояние (например, "Death" или "HitReaction") из любого другого состояния, если условие выполнено.
Важно!
• Для перехода из Any State используй Trigger-параметр.
• Настрой переходы в нужное состояние и выставь условия.
• Это идеально для прерываемых анимаций, смерть и получение урона.
Пример:
Итог:
Blend Trees решают проблему плавного перемещения. Layers и Masks позволяют комбинировать анимации разных частей тела. Any State — это кнопка "прервать всё" для критичных событий.
#Unity #Unity3d #Gamedev #Animation #Indiedev
Blend Trees (Деревья смешивания)
Что это? Инструмент для плавного перехода между несколькими анимациями на основе параметров (например, скорость или направление).
Зачем?
• Создать бесшовный переход от ходьбы к бегу.
• Реализовать движение в 8 направлениях (как в старых RPG).
• Контролировать анимацию поворота на месте.
Как работает?
1. Создаешь Blend Tree внутри State Machine.
2. Добавляешь в него анимации (например, idle, walk, run).
3. Выбираешь параметр для смешивания (чаще всего
Speed типа Float).4. Настраиваешь threshold (значение параметра, при котором проигрывается конкретная анимация).
Пример:
Animator.SetFloat("Speed", 5.5f); // Плавно включит анимацию бегаAnimation Layers и Avatar Masks
Слои анимации позволяют проигрывать несколько анимаций одновременно поверх основной.
Маски аватора определяют, какие части скелета затрагивает слой.
Зачем?
• Верхний слой (Upper Body): Анимация стрельбы или жестов, чтобы не прерывать анимацию ног.
• Слой лица (Face Layer): Мимика и речь, независимые от тела.
• Слой инвентаря: Анимация доставания оружия или использования предмета.
Как настроить?
1. В контроллере анимаций добавляешь новый слой.
2. Назначаешь ему Avatar Mask (например, "UpperBody").
3. Выставляешь Weight (сила влияния слоя) и Blending (аддитивный или поверхностный).
Any State
Что это? Особое состояние, которое есть в любом месте State Machine.
Зачем? Позволяет перейти в определенное состояние (например, "Death" или "HitReaction") из любого другого состояния, если условие выполнено.
Важно!
• Для перехода из Any State используй Trigger-параметр.
• Настрой переходы в нужное состояние и выставь условия.
• Это идеально для прерываемых анимаций, смерть и получение урона.
Пример:
// Прервать любую анимацию и включить смерть
void Die()
{
animator.SetTrigger("Die");
}
Итог:
Blend Trees решают проблему плавного перемещения. Layers и Masks позволяют комбинировать анимации разных частей тела. Any State — это кнопка "прервать всё" для критичных событий.
#Unity #Unity3d #Gamedev #Animation #Indiedev
❤5🔥2 1 1
Я добавил новые реакции!
Предыдущие устарели, поэтому появились😮 😒 🙂 🎧 ⌨️ !
Предыдущие устарели, поэтому появились
Попробуйте их поставить на этом посте.
И напишите свое мнение в комментариях!
Please open Telegram to view this post
VIEW IN TELEGRAM