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

Сотрудничество/реклама/помощь @Akrus001
Download Telegram
Raycast в Unity: основа взаимодействий

Что это?
Воображаемый луч, который проверяет столкновения с объектами. Как лазерная указка!

Зачем?
• Проверять попадания пуль/лучей
• Определять, видит ли враг игрока
• Измерять дистанции (например, для ИИ)
• Работать с 2D (Physics2D.Raycast) и 3D (Physics.Raycast)

Как работает?
1. Задаешь стартовую точку и направление
2. Указываешь максимальную длину луча
3. Получаешь данные о первом столкнувшемся объекте

Пример 3D:
RaycastHit hit;
if (Physics.Raycast(transform.position, transform.forward, out hit, 20f))
{
// Если луч попал в объект:
Debug.Log("Объект: " + hit.collider.name);
Destroy(hit.collider.gameObject);
}

Пример 2D:
RaycastHit2D hit = Physics2D.Raycast(transform.position, Vector2.right, 15f);
if (hit.collider != null)
{
Debug.Log("Попал в 2D объект: " + hit.collider.name);
}

Важно!
• Не забывай про теги и слои (LayerMask) для фильтрации объектов
• Для визуализации в редакторе: Debug.DrawRay(startPos, direction * length, Color.red)
• Используй RaycastAll для множественных попаданий

💡 Применяй для: оружия, путей ИИ, взаимодействий с окружением.
Практикуйся! Чем чаще используешь — тем интуитивнее становится.

#Unity #Unity3D #GameDev #Raycast #Gamedevelopment
1062
👁️ Как создать «зрение» ИИ врага в Unity?

Легко!

Давайте рассмотрим процесс поэтапно:

1️⃣ 1. В двухмерном пространстве можно просто отправить один рейкаст в направлении игрока и проверить, происходит ли столкновение.
2️⃣ 2. Однако, если игрок слегка выглядывает из-за угла и его видно, то этот способ не подойдёт. В таком случае, следует отправлять несколько рейкастов веером и проверять, сталкиваются ли они с чем-либо.
3️⃣ 3. Но что делать в трёхмерном пространстве? Не отправлять же миллион рейкастов!

Для этого можно воспользоваться коллайдером, проверить столкновения и отправить пучок рейкастов!

---

"Все гениальное просто, все простое гениально"


👍 Ставьте лайк и подписывайтесь на канал!
#unity #charp #gamedev #ии #unity3d
2🔥11
Unity Animator: Any State — гибкие переходы

Что это?
Состояние, из которого можно перейти в другое состояние *в любой момент*, независимо от текущей анимации.

Зачем?
• Реагировать на критические события мгновенно (смерть, получение урона)
• Прерывать любую анимацию (например, атаку — если игрока отбросило)
• Упрощать логику переходов между несвязанными состояниями

Как настроить?
1. В окне Animator Controller правой кнопкой → Create StateAny State
2. Создай переход из Any State в целевое состояние (например, "Death")
3. Добавь условие перехода (Bool, Trigger и т.д.)
4. В коде активируй параметр при событии:
animator.SetTrigger("Die"); // Прервёт ЛЮБУЮ анимацию

Важные нюансы:
⚠️ Приоритет: Если к Any State привязано несколько переходов, выполнится первый *валидный*.
Order Matters: Измени порядок переходов в списке (верхний = выше приоритет).
Exit Time не работает: Переход мгновенный, тайминг игнорируется.

Пример:
// При получении смертельного урона:
public void TakeDamage(int damage) {
health -= damage;
if (health <= 0) {
animator.SetTrigger("Die"); // Сработает из ЛЮБОГО состояния
}
}

💡 Где использовать:
• Смерть/возрождение
• Стан/оглушение
• Резкая смена действия (телепорт, трансформация)

Используй Any State для критических событий — сделай игру отзывчивой!
#Unity #gamedev #Animator #Unity3D
🔥8
Media is too big
VIEW IN TELEGRAM
🔥 РОЗЫГРЫШ ИСХОДНИКА UNITY: MINECRAFT SANDBOX! 🔥
Привет геймдев-энтузиасты! 🎮 У нас горячий подарок для тех, кто хочет заглянуть под капот крутого проекта: разыгрываем полный исходник Minecraft Sandbox на Unity!

🤩 Что внутри?
🟢 Готовый sandbox

🟢Адаптивный UI в стиле Minecraft

🟢Оптимизированный код на C#

💎 Ассеты + настройки сцен

🎆 Игра полностью адаптирована под яндекс игры, подключена реклама
Ссылка

Идеально для:
🟣 Новичков в Unity (разбор рабочих механик!)
🟣 Портфолио (добавьте крутой проект!)

👑 Как выиграть:

Подписаться на Akrus Games ❤️

Нажать кнопку "Участвовать"

⚠️ Сроки:
До 20 августа 2025! Победителя выберем рандомом, результат закрепим тут.
Победитель один!

#розыгрыш #unity3d #gamedev #исходники #minecraft #кликер #AkrusGames #программирование
Please open Telegram to view this post
VIEW IN TELEGRAM
8🔥3😁1🎄111
C# Атрибуты в Unity: мета-инструкции для кода

Что это?
Специальные метки для классов, переменных или методов. Они дают подсказки движку и редактору 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
🔥12211
💧 Шейдеры воды в Unity: основы создания

Что это?
Вертексные и фрагментные шейдеры, которые создают иллюзию воды. Они манипулируют геометрией и цветом объекта, чтобы симулировать волны, прозрачность и отражения.

С чего начать?
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
Unity: Мощные инструменты анимации

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🔥211
🔊 3D-звук в Unity: Погружаем игрока в шутер

Зачем?
Чтобы звуки выстрелов, шагов, взрывов и голосов приходили с правильного направления и расстояния. Игрок будет точно знать, откуда стреляют или идёт враг.

Как работает?
Движок рассчитывает громкость и панораму (стерео) для каждого звука исходя из позиции источника и слушателя.

Быстрая настройка:
1. Добавь на объект компонент Audio Source.
2. Включи галочку Spatial Blend и передвинь ползунок до конца вправо (3D). Это главный параметр!
3. Настрой кривую затухания (3D Sound Settings -> Rolloff Mode: Logarithmic или Custom). Укажи, как далеко слышен звук (Max Distance).

Ключевые настройки Audio Source:
- Doppler Level: Эффект сжатия звука при быстром движении (как сирена машины, которая проносится мимо). Для оружия обычно ставится низким (~0.1).
- Spread: Ширина стерео-звука. Для точечных источников (пистолет) — низкое значение, для обширных (взрыв) — высокое.
- Reverb Zones: Добавь компонент Audio Reverb Zone на локацию (например, тоннель или пещера), чтобы звук реалистично отражался от стен.

Пример кода (включить/выключить звук шагов):

public class Footsteps : MonoBehaviour
{
public AudioSource footstepSound;

void Update()
{
if (Input.GetKey(KeyCode.W) || Input.GetKey(KeyCode.A) || Input.GetKey(KeyCode.S) || Input.GetKey(KeyCode.D))
{
if (!footstepSound.isPlaying)
{
footstepSound.Play();
}
}
else
{
footstepSound.Stop();
}
}
}

Важно!
- Слушатель по умолчанию привязан к главной камере. Не перемещай его отдельно.
- Для реалистичности используй Audio Mixer. Создай отдельную группу для звуков игры и применяй к ней эффекты (например, компрессию или эквалайзер).
- Тестируй звук в наушниках.

#Unity #Unity3D #GameDev #GameAudio #gamedevelopment
🔥5211
Unity: что надо знать каждому мидлу

Ми́дл — это тот, кто не просто умеет кодить, а мыслит архитектурно и пишет надежный код.

Чек-лист обязательных знаний:

1. Оптимизация:
* Профилировщик (Profiler) — твой лучший друг. Умей находить узкие места (CPU, GPU, Memory).
* Пулы объектов (Object Pooling) — для пуль, врагов, эффектов. Создавай объекты заранее, а не в реальном времени.
* Кеширование ссылок: Не ищи компоненты (GetComponent) каждый кадр. Находи их в Start/Awake и сохраняй в переменную.

2. Архитектура и читаемость кода:
* SOLID/DRY: Основы чистого кода. Избегай божественных классов (God Class), дели логику на модули.
* События (Events/Actions): Для слабой связности между компонентами. Объекты реагируют на события, а не дергают методы друг друга напрямую.
* Интерфейсы: Определяют контракт, а не реализацию. Помогают делать код гибким и тестируемым.

3. Продвинутые темы Unity:
* ScriptableObjects: Для данных (настройки врагов, предметов) и создания архитектур типа Event System.
* Assembly Definitions: Ускоряют перекомпиляцию и организуют код в модули.
* Custom Editors (Editor Tooling): Автоматизируй рутину — создавай инструменты для дизайнеров и геймдизайнеров.

Пример: кеширование и событие
public class Enemy : MonoBehaviour
{
private Health _health; // Кешируем компонент
public static Action<Enemy> OnEnemyDied; // Событие

private void Awake()
{
_health = GetComponent<Health>(); // Нашли один раз
}

private void Die()
{
OnEnemyDied?.Invoke(this); // Оповещаем всех подписчиков
gameObject.SetActive(false);
}
}


Главное: Умей объяснить почему код написан именно так. Твое преимущество — не в знании синтаксиса, а в способности выбрать лучшее решение для задачи.

#Unity #Unity3D #Gamedev #Programming #Code
11
Шум Перлина в Unity: основа генерации миров

Что это?
Алгоритм для создания плавных, естественных случайных значений. Не просто хаос, а структурированный «шум», похожий на облака, рельеф или текстуру камня.

Зачем?
• Генерация ландшафта (горы, холмы)
• Создание текстур (мрамор, огонь, облака)
• Procedural-генерация миров (карты высот)
• Симуляция природных явлений (дым, туман)

Как работает?
В отличие от случайных чисел, шум Перлина создаёт связанные, непрерывные значения. Он создаёт плавные перепады высот вместо острых пиков.

Как использовать в Unity?
1. Получи значение шума в точке (x, y)
2. Используй это значение для высоты (Y) или внешнего вида объекта

Простой пример для меша:
void GenerateTerrain() {
MeshFilter mf = GetComponent<MeshFilter>();
Vector3[] vertices = mf.mesh.vertices;

for (int i = 0; i < vertices.Length; i++) {
// Получаем значение шума для точки
float sample = Mathf.PerlinNoise(
vertices[i].x * scale,
vertices[i].z * scale
);
// Применяем к высоте вершины
vertices[i].y = sample * heightMultiplier;
}

mf.mesh.vertices = vertices;
mf.mesh.RecalculateNormals();
}

(Переменные scale и heightMultiplier настраивай в инспекторе)

Важно!
• Используй Mathf.PerlinNoise — встроенная функция Unity.
• Координаты должны быть дробными, а не целыми (например, 0.1, 0.15, 0.2).
• Для больших миров используй смещение (offset), чтобы избежать повторения.
• Комбинируй несколько слоёв шума (octaves) для сложного рельефа.

💡 Применяй для: процедурных планет, пещер, растительности и любых органических форм.

Создавай бесконечные уникальные миры! 🌍

#Unity #Unity3D #ProceduralGeneration #PerlinNoise #Gamedev
52