Первым делом, чтобы сохранить ваш сценарий в json, это добавить атрибут класса Serializable для каждого сценария, который вы хотите сериализовать в json.
Но здесь я думаю, что будет сложно сериализовать Значок поля. В json вы действительно можете сохранить только число или строку, и есть ссылка.
Способ сериализации Sprite (или любой ссылки) заключается в сериализации имени или идентификатора объекта. Если вы посмотрите, как единство сериализует сцену, это именно так, как это делается. И затем, когда вы читаете свой json, вы заменяете этот идентификатор своим активом.
В этом может помочь некоторая библиотека json, может помочь NewtonSoft Json. Net, особенно в отношении специальной сериализации для справки, которую я опишу.
Попробуйте сначала без Sprite и добавьте сложности после;)
EDIT
Чтобы быть более точным, я думаю, что лучший способ сделать то, что вы пытаетесь, - это не сериализовать объект ScriptableObject, а вместо этого удерживать класс в скрипте.
class MyScriptable : ScriptableObject
{
private MySerializableClass data;
}
[Serializable]
class MySerializableClass
{
private string name;
private float data1;
private float data2;
}
Затем сериализуйте MySerializableClass и используйте имя или поле некоторого идентификатора, чтобы связать каждый экземпляр сценариев с хорошим MySerializableClass:)