К списку статей

Основные компоненты Unity

📐 Transform

Самый базовый компонент, есть у каждого GameObject. Отвечает за позицию, поворот и масштаб объекта в 3D пространстве. Без Transform объект не может существовать в Unity.

Параметры в Inspector

Настройки компонента:

  • Position (X, Y, Z) - позиция в мировых координатах
  • Rotation (X, Y, Z) - поворот в углах Эйлера (градусы)
  • Scale (X, Y, Z) - масштаб по осям

💡 Position и Rotation показывают мировые координаты, но в коде можно работать и с локальными относительно родителя.

Transform в Inspector

Работа с Transform в коде

Основные свойства:

  • transform.position (Vector3) - мировая позиция
  • transform.localPosition (Vector3) - локальная позиция относительно родителя
  • transform.rotation (Quaternion) - поворот в кватернионах
  • transform.eulerAngles (Vector3) - поворот в углах Эйлера
  • transform.localScale (Vector3) - масштаб
  • transform.forward/right/up (Vector3) - направления объекта

Полезные методы:

  • Transform.Translate(Vector3 translation) - перемещение
  • Transform.Rotate(Vector3 eulers) - поворот
  • Transform.LookAt(Transform target) - поворот к цели

Пример использования

using UnityEngine;

public class FollowPlayer : MonoBehaviour
{
    public Transform Target; // Цель для следования
    public float FollowSpeed = 5f; // Скорость следования
    public Vector3 Offset = new Vector3(0, 2, 0); // Смещение от цели (чтобы объект не начал толкать цель)

    void Update()
    {
        if (Target != null)
        {
            // Вычисляем позицию цели относительно смещения
            Vector3 targetPosition = Target.position + Offset;

            // Плавно перемещаемся к цели
            transform.position = Vector3.Lerp(transform.position, targetPosition, FollowSpeed * Time.deltaTime);

            // Поворачиваемся к цели
            transform.LookAt(Target);
        }
    }
}
Следование за объектом

📦 GameObject

Основная сущность в Unity, контейнер для всех компонентов. GameObject сам по себе ничего не делает - это просто "коробка", в которую мы помещаем компоненты для создания функциональности.

Основные свойства GameObject

Доступные свойства:

  • name (string) - имя объекта в иерархии
  • tag (string) - тег для категоризации объектов
  • layer (int) - слой для рендеринга и физики
  • activeInHierarchy (bool) - активен ли в иерархии
  • activeSelf (bool) - активен ли сам объект

💡 Совет: Используйте теги для быстрого поиска и категоризации объектов в сцене.

GameObject в Inspector

Полезные методы:

  • GameObject.SetActive(bool active) - включить/выключить объект
  • GameObject.CompareTag(string tag) - сравнить тег
  • GameObject.Find(string name) - найти объект по имени
  • GameObject.FindWithTag(string tag) - найти по тегу

Пример использования

using UnityEngine;

public class ObjectToggle : MonoBehaviour
{
    public GameObject TargetObject; // Объект для включения/выключения

    void Update()
    {
        // Переключаем объект по нажатию T
        if (Input.GetKeyDown(KeyCode.T))
        {
            if (TargetObject != null)
            {
                // Инвертируем активность объекта
                TargetObject.SetActive(!TargetObject.activeSelf);

                // Выводим статус в консоль
                Debug.Log($"Объект {TargetObject.name} теперь: {(TargetObject.activeSelf ? "включен" : "выключен")}");
            }
        }
    }
}
Переключение активности объекта

🛡️ Collider

Определяет границы объекта для физических взаимодействий и обнаружения столкновений. Бывает разных типов: Box, Sphere, Capsule, Mesh. Может работать как твердое тело или как триггер (проходимая зона).

Параметры в Inspector

Основные настройки:

  • Is Trigger - триггер (проходимый) или твердое тело
  • Material - физический материал (трение, упругость)
  • Center - центр коллайдера относительно объекта
  • Size/Radius - размеры коллайдера

⚠️ Важно: Триггеры не участвуют в физических столкновениях, но могут обнаруживать вход/выход объектов в его границы.

Collider в Inspector

Работа в коде:

  • Collider.enabled (bool) - включен ли коллайдер
  • Collider.isTrigger (bool) - является ли триггером
  • Collider.bounds (Bounds) - границы коллайдера

События столкновений:

  • OnTriggerEnter(Collider other) - вход в триггер
  • OnTriggerStay(Collider other) - нахождение в триггере
  • OnTriggerExit(Collider other) - выход из триггера
  • OnCollisionEnter(Collision collision) - столкновение с твердым телом

Пример использования

using UnityEngine;
using UnityEngine.Events;

public class SimpleTrigger : MonoBehaviour
{
    public UnityEvent OnTriggerEnterEvent; // События можно настроить в Inspector

    void OnTriggerEnter(Collider other)
    {
        // Выводим информацию о входе в триггер
        Debug.Log($"Объект вошел в триггер: {other.name}");

        // Вызываем событие (можно настроить в Inspector)
        OnTriggerEnterEvent?.Invoke();
    }
}
Работа триггера

⚖️ Rigidbody

Добавляет физическое поведение объекту - гравитация, масса, силы, моменты. Позволяет объекту реалистично взаимодействовать с физическим миром Unity.

Параметры в Inspector

Основные настройки:

  • Mass - масса объекта (влияет на силу столкновений)
  • Drag - сопротивление движению (как в воздухе)
  • Angular Drag - сопротивление вращению
  • Use Gravity - использовать гравитацию
  • Is Kinematic - кинематический режим (управляется скриптом)
  • Interpolate - сглаживание движения для камеры
  • Collision Detection - тип обнаружения столкновений

Constraints (Ограничения):

  • Freeze Position - заморозка движения по осям X, Y, Z
  • Freeze Rotation - заморозка вращения по осям X, Y, Z

💡 Constraints: Используйте для создания 2D-игр (заморозьте Z) или для ограничения движения персонажа (например, запретить вращение).

Rigidbody в Inspector

Работа в коде:

  • Rigidbody.velocity (Vector3) - текущая скорость
  • Rigidbody.angularVelocity (Vector3) - угловая скорость
  • Rigidbody.mass (float) - масса объекта
  • Rigidbody.isKinematic (bool) - кинематический режим

Полезные методы:

  • AddForce(Vector3 force, ForceMode mode) - применить силу
  • AddTorque(Vector3 torque) - применить момент вращения
  • MovePosition(Vector3 position) - переместить (для кинематических)

Пример использования

using UnityEngine;

public class SimplePhysicsMovement : MonoBehaviour
{
    public float MoveForce = 10f; // Сила движения
    public float JumpForce = 5f; // Сила прыжка

    private Rigidbody rb;

    void Start()
    {
        // Получаем компонент Rigidbody
        rb = GetComponent();
    }

    void Update()
    {
        // Получаем ввод от игрока
        float horizontal = Input.GetAxis("Horizontal");
        float vertical = Input.GetAxis("Vertical");

        // Создаем вектор движения и применяем силу
        Vector3 movement = new Vector3(horizontal, 0, vertical) * MoveForce;
        rb.AddForce(movement);

        // Прыжок по пробелу
        if (Input.GetKeyDown(KeyCode.Space))
        {
            rb.AddForce(Vector3.up * JumpForce, ForceMode.Impulse);
        }
    }
}
Физическое управление

📹 Camera

Отвечает за рендеринг сцены и то, что видит игрок. Без камеры на экране ничего не будет отображаться. Камера определяет точку обзора, угол просмотра и какие объекты должны быть видны.

Параметры в Inspector

Основные настройки:

  • Clear Flags - что очищать перед рендером (Skybox, Color, Depth, Nothing)
  • Background - цвет фона (если Clear Flags = Solid Color)
  • Culling Mask - какие слои рендерить
  • Projection - тип проекции (Perspective/Orthographic)

Настройки обзора:

  • Field of View - угол обзора в градусах (для Perspective)
  • Size - размер области просмотра (для Orthographic)
  • Clipping Planes Near/Far - ближняя/дальняя плоскости отсечения

Дополнительные настройки:

  • Viewport Rect - область экрана для рендера (0-1)
  • Depth - приоритет камеры (большее число = рендерится позже)

💡 Perspective vs Orthographic: Perspective создает 3D эффект глубины, Orthographic - плоское 2D изображение без перспективы, пример Orthographic можно увидеть выше.

Camera в Inspector

Работа в коде:

  • Camera.main - основная камера в сцене
  • Camera.fieldOfView (float) - угол обзора
  • Camera.orthographicSize (float) - размер ортографической камеры
  • Camera.nearClipPlane/farClipPlane (float) - плоскости отсечения

Полезные методы:

  • ScreenToWorldPoint(Vector3 position) - экранные координаты в мировые
  • WorldToScreenPoint(Vector3 position) - мировые координаты в экранные
  • ScreenPointToRay(Vector3 position) - луч из камеры через точку экрана

Пример использования

using UnityEngine;

public class SimpleCameraController : MonoBehaviour
{
    public Transform Target; // Цель для следования
    public Vector3 Offset = new Vector3(0, 2, -5); // Смещение от цели
    public float FollowSpeed = 2f; // Скорость следования
    public float ZoomSpeed = 2f; // Скорость зума

    private Camera cam;

    void Start()
    {
        cam = GetComponent();
    }

    void LateUpdate()
    {
        if (Target == null) return;

        // Плавно следуем за целью
        Vector3 targetPosition = Target.position + Offset;
        transform.position = Vector3.Lerp(transform.position, targetPosition, FollowSpeed * Time.deltaTime);
        transform.LookAt(Target);

        // Зум колесом мыши
        float scroll = Input.GetAxis("Mouse ScrollWheel");
        cam.fieldOfView = Mathf.Clamp(cam.fieldOfView - scroll * ZoomSpeed, 20f, 80f);
    }
}
Контроллер камеры

🔊 Audio Source

Воспроизводит звуки в 3D пространстве. Может работать как в 2D режиме (звук одинаково слышен везде), так и в 3D режиме (громкость зависит от расстояния до слушателя).

Параметры в Inspector

Основные настройки:

  • AudioClip - звуковой файл для воспроизведения
  • Output - аудио микшер (для группировки звуков)
  • Mute - заглушить звук
  • Bypass Effects - обойти звуковые эффекты
  • Play On Awake - воспроизводить при создании объекта
  • Loop - зациклить воспроизведение

Настройки звука:

  • Priority - приоритет (0-256, меньше = важнее)
  • Volume - громкость (0-1)
  • Pitch - скорость/высота воспроизведения
  • Stereo Pan - панорама (-1 левый, 1 правый канал)
  • Spatial Blend - баланс 2D/3D звука (0-1)
  • Reverb Zone Mix - смешивание с реверберацией

3D настройки:

  • Doppler Level - эффект Доплера (изменение тона при движении)
  • Volume Rolloff - как затухает звук с расстоянием
  • Min Distance - минимальное расстояние (100% громкость)
  • Max Distance - максимальное расстояние (звук исчезает)

⚠️ Spatial Blend: 0 = 2D звук (музыка, UI), 1 = 3D звук (шаги, выстрелы). Значения между 0-1 смешивают оба режима.

Audio Source в Inspector

Работа в коде:

  • AudioSource.clip (AudioClip) - текущий звуковой клип
  • AudioSource.volume (float) - громкость воспроизведения
  • AudioSource.pitch (float) - высота/скорость тона
  • AudioSource.isPlaying (bool) - воспроизводится ли звук сейчас

Полезные методы:

  • Play() - воспроизвести текущий клип
  • Stop() - остановить воспроизведение
  • Pause() - поставить на паузу
  • PlayOneShot(AudioClip clip) - воспроизвести клип один раз

💡Используйте PlayOneShot() для звуковых эффектов, которые должны воспроизводиться независимо друг от друга (например, множественные выстрелы).

🎨 Mesh Renderer

Отвечает за отображение 3D модели на экране. Работает вместе с Mesh Filter (который хранит геометрию) и Materials (которые определяют внешний вид поверхности).

Параметры в Inspector

Настройки рендеринга:

  • Cast Shadows - отбрасывать тени (On/Off/Two Sided/Shadows Only)
  • Receive Shadows - принимать тени от других объектов
  • Motion Vectors - векторы движения для эффектов размытия
  • Materials - массив материалов для отображения

Освещение:

  • Lightmap Parameters - настройки для запечённого освещения
  • Lightmap Settings - параметры лайтмапов

Дополнительные настройки:

  • Sorting Layer - слой сортировки для 2D
  • Order in Layer - порядок отрисовки в слое

💡 Материалы: Каждый материал может иметь свои текстуры, цвета и свойства. Один объект может использовать несколько материалов.

Mesh Renderer в Inspector

Работа в коде:

  • Renderer.material (Material) - первый материал объекта
  • Renderer.materials (Material[]) - все материалы объекта
  • Renderer.enabled (bool) - включен ли рендеринг
  • Renderer.bounds (Bounds) - границы отображаемой области

Полезные методы:

  • SetPropertyBlock(MaterialPropertyBlock properties) - изменить свойства без создания нового материала

Пример использования

using UnityEngine;

public class ColorChanger : MonoBehaviour
{
    private Renderer meshRenderer;

    void Start()
    {
        // Получаем компонент Renderer
        meshRenderer = GetComponent();
    }

    void Update()
    {
        // Меняем цвет по нажатию C
        if (Input.GetKeyDown(KeyCode.C))
        {
            // Создаем случайный цвет
            Color randomColor = new Color(Random.value, Random.value, Random.value, 1f);

            // Применяем цвет к материалу
            meshRenderer.material.color = randomColor;

            Debug.Log($"Цвет изменен на: {randomColor}");
        }
    }
}
Смена цвета материала

💡 Light

Создает освещение в сцене. Без источников света 3D объекты будут выглядеть плоскими и невыразительными. Unity поддерживает несколько типов освещения для создания реалистичной картинки. От типа проекта (URP | HDRP) настройки могут отличаться.

Параметры в Inspector

Основные настройки:

  • Type - тип света (Directional, Point, Spot, Area)
  • Color - цвет освещения
  • Mode - режим работы (Realtime, Mixed, Baked)
  • Intensity - интенсивность света

Настройки распространения:

  • Range - дальность света (для Point и Spot)
  • Spot Angle - угол конуса (только для Spot)
  • Inner Spot Angle - внутренний угол (для мягких краев)

Тени:

  • Shadow Type - тип теней (No Shadows, Hard Shadows, Soft Shadows)
  • Strength - интенсивность теней (0-1)
  • Resolution - качество теней
  • Bias - смещение для устранения артефактов

💡 Типы света: Directional (солнце), Point (лампочка), Spot (фонарик), Area (окно). Каждый тип создает свой уникальный эффект освещения.

Light в Inspector

Работа в коде:

  • Light.color (Color) - цвет света
  • Light.intensity (float) - интенсивность освещения
  • Light.range (float) - дальность света
  • Light.enabled (bool) - включен ли источник света

Пример использования

using UnityEngine;

public class FlashingLight : MonoBehaviour
{
    public float MinFlashTime = 0.1f; // Минимальное время мигания
    public float MaxFlashTime = 1.5f; // Максимальное время мигания

    private Light lightComponent;
    private float nextFlashTime;

    void Start()
    {
        lightComponent = GetComponent();
        nextFlashTime = Time.time + Random.Range(MinFlashTime, MaxFlashTime);
    }

    void Update()
    {
        // Хаотичное мигание как в хорроре
        if (Time.time >= nextFlashTime)
        {
            lightComponent.enabled = !lightComponent.enabled;
            nextFlashTime = Time.time + Random.Range(MinFlashTime, MaxFlashTime);
        }
    }
}
Мигающий свет