Ресурсы и шаблонные экземпляры в Unity

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

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

Кстати, если игровые объекты часто переиспользуются, их можно превратить в ресурс, называемый «шаблонным экземпляром» (prefab), но об этом чуть ниже. Кроме того, ресурсы могут представлять собой менее «осязаемые» объекты, допустим, те же карты контроля ввода, настройки графики, строковые БД для интернационализации и так далее. Еще разработчик может создавать свои типы ресурсов, используя ScriptableObjects. Вот, к примеру, соответствующая статья на эту тему.

В чем важность ресурсов? Дело в том, что когда проект находится в разработке, ресурсы являются ключевой информационной составляющей кодовой базы, вместе с кодом как таковым. Что касается готового пакета с игрой, то в нем содержится большая часть ваших ресурсов. И эти ресурсы будут сохранены на диске того устройства, на которое инсталлирована игра.

Шаблонные экземпляры

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

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

Вложенные шаблоны

Уже, начиная с Unity 2018.3, появилась поддержка вложенных шаблонов. Основные концепции следующие:

  1. Родительский объект с дочерними объектами, которые представлены в качестве шаблонов, можно представить тоже в виде шаблона. При этом внутри родительского шаблона у дочернего шаблона допускается наличие собственных модификаций. Кроме того, в сцене инстанцируется сразу вся шаблонная иерархия, и поверх нее тоже можно надстраивать модификации, которые специфичны для конкретной сцены.
  2. Шаблонный экземпляр, который находится в сцене и снабжен своими локальными модификациями, можно сохранить в качестве самостоятельного ресурса «Prefab Variant». Данный вариант — это шаблонный ресурс, который наследует от другого шаблона, причем поверх него задействованы дополнительные модификации.

Вышеописанные концепции можно, кстати, компоновать: в частности, возможен шаблонный вариант вложенного шаблона либо даже шаблонный вариант шаблонного варианта.

По материалам статьи «Basic Concepts in Unity for Software Engineers».