🏠 Главная

🎮 Геймобъекты в Unity

В Unity всё начинается с GameObject — это как кирпичик, из которого строится вся игра. Персонажи, враги, кнопки, пули, деревья, даже пустой воздух со скриптом — всё это геймобъекты.

Сам по себе геймобъект — просто контейнер. Он не двигается, не мигает и не звучит, пока ты не скажешь ему, что делать. А сказать можно через код.

В этом уроке ты узнаешь, как сохранять объекты в переменные, как включать и выключать их в игре, и как сделать так, чтобы они начали слушаться тебя. Шаг за шагом — без спешки.

🏗 Создание GameObject

Чтобы добавить в сцену что-то новое, нужно создать GameObject. Это можно сделать вручную в редакторе: нажми правой кнопкой мыши в иерархии (Hierarchy) → Create Empty или выбери один из готовых шаблонов, например 3D Object → Cube или 2D → Sprite.

Каждый GameObject имеет имя — по нему ты легко узнаешь его в списке объектов. Дай ему понятное название: Player, Enemy, Fireball — чтобы потом не путаться.

Даже пустой объект всё равно не совсем пуст: у него всегда есть Transform — это основной компонент, без которого объект не может существовать. Transform отвечает за позицию, поворот и масштаб объекта в мире.

Если ты видишь объект в сцене — у него есть Transform. Даже если ты не видишь — он всё равно там. Это как координаты на карте: без них объект не знает, где он находится.

Окно Unity Editor с открытым меню GameObject в верхней панели
Окно Unity Editor — открыто верхнее меню GameObject с вариантами создания новых объектов

💡 Unity умеет автоматически создавать GameObject, если ты, например, просто перетащишь спрайт в сцену. Она сразу создаст новый объект, добавит к нему нужные компоненты (например, SpriteRenderer) и подстроит Transform. Это быстрый способ начать — но внутри всё равно будет тот же геймобъект.

💡 Ты можешь создавать объекты и прямо из кода — но сначала лучше разобраться с тем, как они устроены вручную.

🧷 GameObject как переменная

Чтобы управлять объектом из кода — нужно сохранить ссылку на него в переменную. Это как протянуть невидимую ниточку от скрипта до объекта в сцене.

Для этого мы объявляем переменную типа GameObject. А чтобы она появилась в редакторе Unity и её можно было назначить вручную — перед ней нужно написать слово public.

После этого в инспекторе (Inspector) ты увидишь новое поле под скриптом. Просто перетащи туда нужный объект из сцены — и теперь скрипт сможет с ним работать.


using UnityEngine;

public class CSharpScript : MonoBehaviour
{
    // Публичная переменная — её можно увидеть и назначить в редакторе
    public GameObject player;

    // Start вызывается один раз при запуске объекта
    void Start()
    {
        // Здесь можно, например, отключить объект при старте
        // player.SetActive(false);
    }

    // Update вызывается каждый кадр
    void Update()
    {
        // Здесь можно управлять объектом во время игры
    }
}

💡 player.SetActive(false) — это один из методов Unity, который позволяет включать и выключать объект. Таких методов много, и они помогают управлять состоянием и поведением объектов прямо из кода. О том, как работают эти команды и что ещё умеет Unity API, мы подробно поговорим в 9‑м уроке.

Unity Editor: объект с прикреплённым скриптом CSharpScript и полем Player в инспекторе
В Unity Editor: объект с прикреплённым скриптом CSharpScript. В инспекторе видно публичное поле Player, куда можно перетащить другой GameObject из сцены.

💡 public делает переменную доступной снаружи — именно поэтому Unity умеет показывать её в редакторе. Есть и другой способ — с [SerializeField], но о нём мы поговорим позже.

Иногда переменная нужна только внутри скрипта — тогда public писать не обязательно. Можно оставить её приватной (по умолчанию или явно с private) и задать значение прямо в коде, без редактора.


using UnityEngine;

public class CSharpScript : MonoBehaviour
{
    // Приватная переменная — не видна в редакторе, но доступна внутри скрипта
    private GameObject player;

    // Start вызывается один раз при запуске объекта
    void Start()
    {
        // Ищем объект с тегом "Player" и сохраняем его в переменную
        player = GameObject.FindWithTag("Player");
    }

    // Update вызывается каждый кадр
    void Update()
    {

    }
}

В следующем уроке мы поговорим о компонентах геймобъекта — тех самых "внутренностях", которые делают его видимым, двигающимся или реагирующим на мир. Узнаем, как получать доступ к этим компонентам из кода и управлять ими по своему желанию.