Не удается назначить ScriptableObject в инспекторе

У меня проблемы с назначением ScriptableObjects в инспекторе.

Например, у меня есть этот класс:

using UnityEngine;

public class Buff : ScriptableObject {
    public string buffName;
}

В одном из классов, производных от монобихев, у меня есть такой член:

public Buff testBuff;

В инспекторе я вижу следующее, но я не могу перетащить + отбросить скрипт 'Buff' к этому участнику введите описание изображения здесь
Он работает для перетаскивания Buff как нового скрипта, но я не могу добавить его в "Test Buff".

Вместо перетаскивания я попытался создать экземпляр Buff следующим образом:

public Buff testBuff = new Buff();

Это сработало:введите описание изображения здесь Однако я считаю, что перетаскивание также должно работать, плюс вышесказанное дает предупреждение:

Buff must be instantiated using the ScriptableObject.CreateInstance method instead of new Buff.
UnityEngine.ScriptableObject:.ctor()
Buff:.ctor()
...

Я использую Unity "5.0.2f1 Personal", которая является последней версией.

3 ответа

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

По сути, вы просто создаете пункт меню для каждого имеющегося у вас типа объекта Scriptable, используете этот пункт меню для создания ресурсов этих типов, а затем изменяете ресурсы, используя значения, которые вы хотите, чтобы они имели. Важно помнить, что SCO следует использовать в качестве шаблонов, если вы изменяете SCO либо в редакторе, либо с помощью кода, эти изменения мгновенно вступают в силу для всех объектов GameObject и компонентов, которые ссылаются на SCO.

Создать ресурс с определенным расширением файла внутри пользовательского инспектора, используя EditorGUILayout.ObjectField; DefaultAsset; Открыть / Сохранить диалог подробно видео как это сделать

Это потому, что вы не добавили [System.Serializable] в класс Buff:ScriptableObject, поэтому все ваши «баффы» не сериализуемы, а редактор Unity не может читать С# напрямую, он может читать только сериализованные С#.

Другие вопросы по тегам