Keep your place in this quest

Log in or sign up for free to subscribe, follow lesson progress, and access more learning content.

Понимание сущностей

Давайте теперь разберёмся с понятием Entity в Cave. Сущности — это базовые объекты внутри сцены Cave.

Если сцена — это уровень, меню или тестовое пространство, то сущности — это объекты, которые существуют внутри этого пространства. Например, игрок, враг, дверь, свет, камера, триггер, кнопка интерфейса, звуковой источник и папка — все это может быть сущностями.

В этом уроке вы узнаете о:

  • Именах.
  • ID.
  • Активном состоянии.
  • Родительских связях.
  • Папках.
  • Порядке иерархии.
  • Тегах и свойствах.
  • Экземплярах шаблонов.

Эти детали могут показаться мелкими, но они имеют большое значение, когда сцена растёт от нескольких объектов до полноценного уровня.

Что такое Entity?

Entity — это объект на сцене.

Сущность может быть:

  • Видимым 3D объектом.
  • Невидимым вспомогательным элементом.
  • Игровым триггером.
  • Элементом интерфейса.
  • Звуковым источником.
  • Или просто папкой, используемой для организации.

image.png

Например, ящик — это видимая сущность. Точка спауна может быть невидимой во время игры, но это всё равно сущность, так как она обозначает место, где что-то должно произойти.

В Cave эта идея проста: сцены строятся из сущностей.

Сущности как контейнеры компонентов

Сущности сами по себе мало что делают, их возможности зависят от компонентов. Например:

Сущность Входящие компоненты
Ящик Transform, Mesh, Rigid Body
Игрок Transform, Character, Camera, Python, Audio
Дверь Transform, Mesh, Rigid Body, Logic Bricks
Факел Transform, Mesh, Light, Audio
Кнопка Transform, UI Element, Logic Bricks или Python

Вот почему сущности гибки. Дверь — не отдельный хардкоденный тип объекта. Это сущность, состоящая из частей: меш для визуализации, коллизия для блокировки игрока и логика для открытия или закрытия.

Когда вы это понимаете, создание объектов становится практичнее. Вы перестаёте спрашивать «какой тип объекта нужен?», а начинаете задаваться вопросом «какие компоненты нужны этой сущности?».

Имена сущностей

Каждая сущность имеет имя. Вы можете изменить имя из быстрого меню редактирования в Scene Graph или на вкладке Properties.

Стоит отметить, что имена предназначены, прежде всего, для людей:

  • Они упрощают просмотр Scene Graph.
  • Помогают в отладке.
  • Упрощают обсуждение объектов с командой.
  • Помогают лучше понимать свою сцену позже.

Cave не требует уникальности имён сущностей. Несколько сущностей могут иметь одинаковое имя, что удобно для повторяющихся объектов, таких как камни, монеты, ящики или враги.

Однако не стоит считать имя единственным надежным идентификатором сущности.

Хорошие имена простые и описательные:

Плохое имя Лучшее имя
Mesh Деревянный ящик
Empty Старт игрока
Light Свет у входа в пещеру
Folder Группа врагов

Цель — не сделать имена красивыми, а сделать сцену читаемой.

Имена сущностей также могут использоваться в коде, чтобы получить конкретную сущность из сцены. Но поскольку несколько сущностей могут иметь одинаковое имя, если вы пытаетесь получить сущность по имени, это может привести к неопределённому поведению: будет возвращён первый найденный объект с этим именем. Поэтому если важно получить конкретный объект в коде, например игрока, обязательно дайте ему уникальное имя.

ID сущностей

Внутренне Cave отслеживает сущности с помощью уникальных ID.

Обычно вам не нужно изменять или волноваться об этих ID. Они нужны движку, чтобы надёжно идентифицировать сущности, даже если имена повторяются. Уникальные ID неизменяемы, то есть вы не можете их поменять. Они назначаются движком автоматически.

Запомните:

Параметр Назначение
Имя Помогает вам ориентироваться в сцене
ID Помогает движку отслеживать объект внутри системы

Если у двух врагов в имени Enemy, Cave всё равно сможет их различать.

Активное состояние сущности

Сущности могут быть активными или неактивными.

image.png

В Scene Graph и на вкладке Properties это отображается с помощью иконки в виде глаза — переключателя активности.

Состояние Значение
Активна Сущность участвует в сцене как обычно
Неактивна Сущность остаётся в сцене, но отключена

В зависимости от сущности и её компонентов, отключение может влиять на:

  • Отрисовку.
  • Физику.
  • Логику.
  • Обновления во время выполнения.
  • Поведение компонентов.

Отключённая сущность не будет вызывать обновления своих компонентов, и в момент отключения у компонентов вызовется метод завершения, а при повторном включении — метод запуска.

Можно с уверенностью считать, что неактивная сущность не участвует в вычислениях физики, логике, триггерах и других процессах сцены, если вы только специально не запросите эти сущности и не проигнорируете их отключённость.

Практически это означает: неактивна — значит "здесь, но не участвует сейчас".

Отключение и удаление

Отключение и удаление — это разные действия.

Действие Результат
Отключить Оставляет сущность в сцене, но выключает её
Удалить Удаляет сущность из сцены

Отключайте сущность, если планируете использовать её позже. Удаляйте сущность, если уверены, что она больше не нужна.

Для тестирования отключение часто безопаснее. Если сражение с врагами слишком сложное, сначала отключите нескольких врагов и проверьте уровень. Если результат вас устраивает, потом можно почистить сцену.

Родительские связи сущностей

Сущности могут иметь родителей — другие сущности.

Если у сущности есть родитель, она становится частью иерархии родителя. При перемещении родителя перемещаются и дочерние сущности.

Родительские связи полезны для:

  • Меча, прикреплённого к персонажу.
  • Света, связанного с факелом.
  • Камеры, прикреплённой к транспортному средству.
  • Группы предметов, организованных в папку.
  • Элементов UI, сгруппированных под родительской панелью.

Родительские связи также влияют на трансформации — трансформация дочерней сущности вычисляется относительно иерархии родителя.

Это один из простейших способов держать связанные объекты вместе.

Папки как сущности

Папки используются для организации сцены. Они особенно полезны, когда в сцене становится много объектов.

По определению, папка — это сущность, у которой почти нет компонентов, в частности нет Transform и UI Element, так как если у сущности нет трансформации в мире и UI элемента, вероятно, она используется как папка. Но это в основном конвенция имени, имейте это в виду.

Типичные группы папок:

  • Environment (Окружение)
  • Gameplay Triggers (Игровые триггеры)
  • Enemies (Враги)
  • Props (Реквизит)
  • Lighting (Освещение)
  • UI
  • Audio (Звук)
  • Debug Helpers (Отладочные помощники)

Папки — это не только аккуратность. Чистый Scene Graph помогает работать быстрее: вы можете найти нужный объект без перелистывания сотен разрозненных сущностей.

Порядок иерархии сущностей

Порядок сущностей в Scene Graph важен для организации, а в некоторых случаях — для порядка обработки или отображения.

Если открыть папку и увидеть структуру ниже, её сложно просканировать:

Crate
Player
Light
Enemy
Camera
Rock
Trigger

Но так удобнее:

Player
Camera
Lighting
Enemies
Environment
Gameplay Triggers

Цель не сделать иерархию красивой, а сделать её полезной.

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

Важное замечание: из-за оптимизаций движка порядок сущностей верхнего уровня (без родителей) будет случайным, но дочерние сущности могут иметь конкретный порядок, который вы можете менять, вызывая контекстное меню по правому клику в редакторе и перемещая их вверх, вниз, в начало или в конец.

Свойства и теги сущностей

Сущности могут хранить пользовательские свойства и теги.

Особенность Назначение
Свойство Хранит редактируемое значение
Тег Добавляет метку для идентификации или группировки

Например, враг может иметь:

  • Тег Damageable.
  • Свойство health.
  • Свойство team.
  • Свойство patrolRadius.

Скрипты и логика могут использовать эти данные для принятия решений.

Система урона может искать сущности с тегом Damageable. Скрипт врага может читать patrolRadius, чтобы определить, как далеко враг может отходить.

Свойства и теги позволяют придавать сущности смысл в игровом процессе без необходимости создавать специальный компонент для каждого маленького параметра.

Теги быстрее по запросу, чем свойства, поэтому они лучше подходят, например, для определения, что сущность может получать урон или является врагом. Но сами по себе теги не содержат значения. Свойство медленнее в запросе, но содержит значение. В терминах кода, свойства сущности — это, по сути, словари Python.

Просмотр шаблонов сущностей

Некоторые сущности являются экземплярами Entity Templates. Например, Игрок из стандартного проекта Cave — это экземпляр шаблона:

image.png

Экземпляры шаблонов отображаются в Scene Graph особым цветом, который присвоен шаблону в Cave. Это помогает понять, что сущность происходит из повторно используемого шаблона.

Когда сущность является экземпляром шаблона:

  • Его внутренние дочерние элементы принадлежат шаблону.
  • Размещённый экземпляр принадлежит сцене.
  • Структура шаблона редактируется путём открытия ресурсa шаблона.
  • Локальные значения всё ещё могут настраиваться, если они представлены в виде свойств.

В следующем уроке шаблоны Entity будут объяснены более подробно.

Ментальная модель Entity

Представьте Entity как небольшой контейнер:

  • Имя помогает вам его понять.
  • ID помогает Cave следить за ним.
  • Активное состояние контролирует его участие.
  • Родитель показывает, к чему он принадлежит.
  • Компоненты определяют, что он делает.
  • Свойства и теги описывают дополнительные игровые данные.

Это основа построения сцен в Cave.

Когда Entity становятся понятными, Scene Graph перестаёт быть просто списком объектов. Он становится структурой вашего игрового мира.