Мои Уведомления
Привет, !
Мой Аккаунт Мои Финансы Мои Подписки Мои Настройки Выход
Руководство API скрипты

ScriptableObject — это контейнер данных, который можно использовать для сохранения больших объемов данных независимо от экземпляров класса. Одним из основных вариантов использования ScriptableObjects является сокращение использования памяти вашим проектом за счет исключения копий значений. Это полезно, если в вашем проекте есть Prefabтип актива, который позволяет вам хранить GameObject с компонентами и свойствами. Префаб действует как шаблон, из которого вы можете создавать новые экземпляры объектов на сцене. Подробнее
См. в Словарь
, который хранит неизменяемые данные во вложенном MonoBehaviour скриптыЧасть кода, позволяющая создавать собственные компоненты, запускать игровые события, изменять свойства компонентов с течением времени и реагировать на действия пользователя. любым удобным вам способом. Подробнее
См. в Словарь
.

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

Как и MonoBehaviours, ScriptableObjects являются производными от базового объекта Unity, но, в отличие от MonoBehaviours, вы не можете прикрепить ScriptableObject к GameObjectФундаментальный объект в сценах Unity, который может представлять персонажей, реквизит, декорации, камеры, путевые точки и многое другое. Функциональность GameObject определяется прикрепленными к нему компонентами. Подробнее
См. в Словарь
. Вместо этого вам нужно сохранить их как ресурсы в вашем проекте.

При использовании редактора вы можете сохранять данные в ScriptableObjects во время редактирования и во время выполнения, поскольку ScriptableObjects используют пространство имен редактора и сценарии редактора. Однако в развернутой сборке вы не можете использовать ScriptableObjects для сохранения данных, но можете использовать сохраненные данные из ресурсов ScriptableObject, которые вы настроили во время разработки.

Данные, которые вы сохраняете из инструментов редактора в ScriptableObjects как актив, записываются на диск и поэтому сохраняются между сеансами.

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

Использование ScriptableObject

Основные варианты использования ScriptableObjects:

  • Сохранение и хранение данных во время сеанса редактора
  • Сохранение данных в качестве объекта в проекте для использования во время выполнения

Чтобы использовать ScriptableObject, создайте сценарий в Активах вашего приложенияЛюбой носитель или данные, которые можно использовать в вашей игре или проект. Ресурс может быть получен из файла, созданного вне Unity, например, из 3D-модели, аудиофайла или изображения. Вы также можете создавать некоторые типы ресурсов в Unity, например контроллер аниматора, аудиомикшер или текстуру рендеринга. Подробнее
Просмотреть в папке Словарь
и сделать ее наследуемой от ScriptableObject класс. Вы можете использовать атрибут CreateAssetMenu, чтобы упростить создание пользовательских ресурсов с помощью вашего класса. Например:

using UnityEngine; [CreateAssetMenu(fileName = "Data", menuName = "ScriptableObjects/SpawnManagerScriptableObject", order = 1)] public class SpawnManagerScriptableObject : ScriptableObject { public string prefabName; public int numberOfPrefabsToCreate; public Vector3[] spawnPoints; }

С помощью приведенного выше сценария в папке Assets вы можете создать экземпляр ScriptableObject, перейдя в раздел Assets > Create > ScriptableObjects > SpawnManagerScriptableObject. Дайте вашему новому экземпляру ScriptableObject осмысленное имя и измените значения. Чтобы использовать эти значения, вам нужно создать новый скрипт, который ссылается на ваш ScriptableObject, в данном случае это SpawnManagerScriptableObject. Например:

using UnityEngine; public class Spawner : MonoBehaviour { // The GameObject to instantiate. public GameObject entityToSpawn; // An instance of the ScriptableObject defined above. public SpawnManagerScriptableObject spawnManagerValues; // This will be appended to the name of the created entities and increment when each is created. int instanceNumber = 1; void Start() { SpawnEntities(); } void SpawnEntities() { int currentSpawnPointIndex = 0; for (int i = 0; i < spawnManagerValues.numberOfPrefabsToCreate; i++) { // Creates an instance of the prefab at the current spawn point. GameObject currentEntity = Instantiate(entityToSpawn, spawnManagerValues.spawnPoints[currentSpawnPointIndex], Quaternion.identity); // Sets the name of the instantiated entity to be the string defined in the ScriptableObject and then appends it with a unique number. currentEntity.name = spawnManagerValues.prefabName + instanceNumber; // Moves to the next spawn point index. If it goes out of range, it wraps back to the start. currentSpawnPointIndex = (currentSpawnPointIndex + 1) % spawnManagerValues.spawnPoints.Length; instanceNumber++; } } }

Примечание. Имя файла сценария должно совпадать с именем класса.

Прикрепите приведенный выше сценарий к игровому объекту в вашей сценеСцена содержит среды и меню вашей игры. Думайте о каждом уникальном файле сцены как об уникальном уровне. В каждой сцене вы размещаете свое окружение, препятствия и декорации, по сути проектируя и создавая свою игру по частям. Подробнее
См. в Словарь
. Затем в Инспектореокне Unity отображается информация о текущем выбранном игровом объекте, активе или настройках проекта, что позволяет вам проверять и отредактируйте значения. Подробнее
См. в Словарь
, установите значения диспетчера появления в новый SpawnManagerScriptableObject, который вы настроили.

Укажите в поле Создание объекта любой префаб в папке «Активы», затем нажмите Воспроизвести в редакторе. Префаб, на который вы ссылаетесь в Spawner, создается с использованием значений, установленных вами в экземпляре SpawnManagerScriptableObject.

Если вы работаете со ссылками на ScriptableObject в Инспекторе, вы можете дважды щелкнуть поле ссылки, чтобы открыть Инспектор для вашего ScriptableObject. Вы также можете создать пользовательский редактор, чтобы определить внешний вид инспектора для вашего типа, чтобы упростить управление данными, которые он представляет.

Вы можете отблагодарить автора, за перевод документации на русский язык. ₽ Спасибо
Руководство Unity 2021.3