Основные компоненты Unity
📐 Transform
Самый базовый компонент, есть у каждого GameObject. Отвечает за позицию, поворот и масштаб объекта в 3D пространстве. Без Transform объект не может существовать в Unity.
Параметры в Inspector
Настройки компонента:
- Position (X, Y, Z) - позиция в мировых координатах
- Rotation (X, Y, Z) - поворот в углах Эйлера (градусы)
- Scale (X, Y, Z) - масштаб по осям
💡 Position и Rotation показывают мировые координаты, но в коде можно работать и с локальными относительно родителя.
Работа с 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.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.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.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.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 смешивают оба режима.
Работа в коде:
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 - порядок отрисовки в слое
💡 Материалы: Каждый материал может иметь свои текстуры, цвета и свойства. Один объект может использовать несколько материалов.
Работа в коде:
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.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);
}
}
}