Игровые искры для ссылки на объект 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