Не удается назначить 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 не может читать С# напрямую, он может читать только сериализованные С#.