Система ассетов и Content Browser

Урок объясняет, как Unreal хранит ассеты, как они ссылаются друг на друга и почему файлы нельзя двигать в проводнике.

Ассет — это любой ресурс проекта (модель, текстура, материал, Blueprint, звук), хранящийся в отдельном файле и доступный через Content Browser.

Что такое ассет в Unreal

В Unity ассеты лежат как обычные файлы плюс служебные .meta. В Unreal почти всё — модели, материалы, Blueprint'ы — упаковано в бинарные файлы с расширением .uasset внутри папки Content. Эти файлы нельзя осмысленно открыть в текстовом редакторе; ими управляют только через Content Browser внутри движка.

Ссылки между ассетами

Ассеты ссылаются друг на друга. Материал ссылается на текстуры, Blueprint персонажа — на меш и анимации, уровень — на размещённые Actor'ы. Эти связи Unreal отслеживает по внутреннему пути ассета. Поэтому ключевое правило: перемещать, переименовывать и удалять ассеты нужно только внутри Content Browser, чтобы движок обновил все ссылки. Если переместить .uasset в проводнике операционной системы, ссылки сломаются.

Material_Brick.uasset
   |--ссылается на--> Texture_BrickColor.uasset
   |--ссылается на--> Texture_BrickNormal.uasset

BP_Hero.uasset
   |--ссылается на--> SK_HeroMesh.uasset
   |--ссылается на--> Anim_HeroRun.uasset

Импорт внешних ресурсов

Модели (FBX), текстуры (PNG, TGA), звуки (WAV) импортируются перетаскиванием в Content Browser или кнопкой Import. При импорте Unreal конвертирует их в свой формат .uasset. Исходный файл при этом не нужен для работы игры — движок использует уже сконвертированную копию.

Тип ресурсаФормат импортаВо что превращается
3D-модельFBX, OBJStatic Mesh или Skeletal Mesh
ТекстураPNG, TGA, JPGTexture2D
ЗвукWAVSound Wave

Как работает под капотом

Каждый ассет имеет уникальный путь вида /Game/Characters/BP_Hero. Движок хранит граф зависимостей между ассетами и при упаковке игры включает в сборку только те, что реально используются. Если ассет ни на что не ссылается и ни от чего не зависит, при упаковке он может быть исключён. Поэтому «потерянные» ассеты не попадают в финальную игру, экономя её размер.

Частые ошибки

  • Двигать файлы в проводнике ОС. Это ломает ссылки; всегда работайте через Content Browser.
  • Удалять ассет, на который ссылаются. Перед удалением Unreal покажет список ссылающихся объектов через Reference Viewer.
  • Класть всё в одну папку. Без структуры папок (Characters, Materials, Maps) проект быстро превращается в хаос.

Reference Viewer и зависимости

Когда проект разрастается, становится трудно держать в голове, что от чего зависит. Здесь выручает встроенный инструмент Reference Viewer: щёлкните по ассету правой кнопкой и выберите Reference Viewer, и Unreal нарисует граф — что ссылается на этот ассет и на что ссылается он сам. Это бесценно перед удалением: вы сразу видите, не сломаете ли что-то. Слева на графе — те, кто использует ассет, справа — то, что использует он.

Связанный инструмент — Size Map: он показывает, сколько места занимает ассет вместе со всеми своими зависимостями. Так находят «тяжёлые» цепочки, раздувающие размер игры. Привычка изредка проверять зависимости спасает проект от хаоса, когда удаление одной текстуры неожиданно ломает десяток материалов.

Итоги

  • Ассеты хранятся в бинарных файлах .uasset в папке Content.
  • Ассеты ссылаются друг на друга; двигать и переименовывать их можно только в Content Browser.
  • Внешние ресурсы импортируются и конвертируются в формат движка.
  • Неиспользуемые ассеты не попадают в финальную сборку.
Проверьте себя
1. Почему нельзя перемещать .uasset файлы через проводник ОС?
AФайлы зашифрованы
BСломаются внутренние ссылки между ассетами
CОни станут текстовыми
DЭто запрещено лицензией
2. Во что превращается импортированная PNG-текстура?
AВ Static Mesh
BВ Texture2D (.uasset)
CВ Blueprint
DВ Sound Wave
3. Что произойдёт с ассетом, на который никто не ссылается, при упаковке игры?
AОн всегда включается
BОн может быть исключён из сборки
CИгра не соберётся
DОн удалится из проекта