Игровые искры для ссылки на объект Unity не установлены для экземпляра объекта

Я использую GameSparks с единством и пытаюсь извлечь определенные данные из базы данных.

Я установил событие под названием "getItem" с атрибутом "type", установленным в "used in script".

Я настроил событие облачного кода, чтобы получить доступ к этому событию с помощью атрибута "type", который фактически получит доступ к полю описания в данных.

var description = Spark.getData().type; // get the type we passed in
if(description !== ""){
    // if the type wasnt an empty string, then we can use the type in our query
    Spark.setScriptData('items', Spark.metaCollection('items').find({"description": description}));
}

В тестовом жгуте я проверяю подлинность и затем отправляю событие журнала с этим JSON

{
   "@class": ".LogEventRequest",
   "eventKey": "getItem",
   "type": "Sharp"
}

В инспекторе я вижу количество заявлений: 2 с запросом и ответом

{
  "@class": ".LogEventResponse",
  "scriptData": {
    "items": [
      {
        "_id": {
          "$oid": "59160a27feeace0001d90f7f"
        },
        "shortCode": "sword",
        "name": "Stone Sword",
        "description": "Sharp",
      }
    ]
  }
} 

В моем коде Unity у меня все настроено, я аутентифицируюсь, и при нажатии кнопки это вызывает:

        new GameSparks.Api.Requests.LogEventRequest()
            .SetEventKey("getItem")
            .SetEventAttribute("type", "Sharp")
            .Send((response) => {
            if (!response.HasErrors) {
                    GSData data = response.ScriptData.GetGSData("items");
                    print("Item ID: " + data.GetString("name"));
            } else {
                Debug.Log("Error Saving Player Data...");
            }
        });

Вот когда я получаю поток "ссылка на объект не установлена ​​на экземпляр объекта"

Если я удаляю оператор print, он не выдает ошибок. Кажется, что он просто не находит каких-либо описаний острых предметов, хотя тестовый жгут делает это.

Я пробовал много вариантов кода, но не могу заставить его работать.

1 ответ

Решение

Как вы правильно заметили, ошибка возникла из-за несоответствия между данными в вашем ответе и получателем, который вы использовали для его получения.

Так как ваше поле 'items' содержит массив, который вам нужно использовать

Список данных = response.ScriptData.GetGSDataList("items");

и перебрать список.

Чтобы вернуть отдельный объект, а не массив, вы можете изменить свой запрос облачного кода на:

Spark.metaCollection ('items'). FindOne({"description": description})

Обратите внимание, что если несколько документов удовлетворяют предоставленному запросу, mongo вернет первый найденный документ.

Если у вас возникнут какие-либо дополнительные вопросы или возникнут проблемы при использовании GameSparks, вы можете связаться с нашей службой поддержки по адресу - https://support.gamesparks.net/support/home

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