Использование JsonUtility в Unity для печати класса с пользовательским подобъектом в вывод JSON - PullRequest
1 голос
/ 02 октября 2019

Я пытался напечатать объект JSON с другим объектом внутри него, а также собственные переменные c # во вложенный объект json. Без пользовательского объекта объект печатается нормально, однако после добавления пользовательского объекта он печатает только внутренние объекты InstanceID. Вот код, я пытался найти решение, но я не видел подобной проблемы.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Character : MonoBehaviour
{
    public string name, char_class, race, alignment;
    public int hp, xp, armor, speed;
    public List<string> itemList = new List<string>();
    public Abilities abilities;

    public string SaveToString()
    {
        return JsonUtility.ToJson(this);
    }
}

public class Abilities : MonoBehaviour
{
    public int strength, dexterity, intelligence, constitution, wisdom, charisma;
}

вывод:

{"name":"test","char_class":"Barbarian","race":"Dragonborn","alignment":"Lawful Good","hp":0,"xp":12,"armor":1,"speed":123,"itemList":[],"abilities":{"instanceID":0}}

, но я пытаюсь получитьу него есть подробная вкладка JSON способностей для объекта способностей внутри другой распечатки json.

1 Ответ

1 голос
/ 02 октября 2019

Попробуйте добавить [Serializable] к вашему Abilities классу. Ваш Character класс может подразумевать сериализацию, потому что это вызывающий класс.

Дополнительная информация здесь: https://docs.unity3d.com/Manual/JSONSerialization.html

В качестве альтернативы, вы могли бы реализовать что-то более широко используемое, например Json.Net (в C #, не комментируя Unity3D в частности). Не уверен, насколько легко реализовать сторонние зависимости в Unity в наши дни.

Редактировать:

Решение для OP, похоже, было:

  1. Добавление [Serializable] к каждому из пользовательских классов
  2. Удаление наследования из MonoBehaviour, который является массивным базовым классом, который, вероятно, был главным виновником здесь. Больше информации об этом классе
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...