我使用GameSparks统一,我试图从数据库中提取某些数据。
我设置了一个名为" getItem"具有属性" type"设置为"用于脚本"。
我设置了一个云代码事件,通过使用" 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语句,它不会抛出错误。即使测试安全带,它似乎也没有找到任何尖锐的描述。
我尝试了很多代码变体但无法使其正常工作。
答案 0 :(得分:1)
正如您所发现的那样,错误来自您的回复中的数据与您用于检索它的获取器之间的不匹配。
因为你的物品'字段包含您需要使用的数组
列出数据= response.ScriptData.GetGSDataList(" items");
并遍历列表。
要返回单个对象而不是数组,您可以将云代码查询更改为:
Spark.metaCollection(' items')。findOne({" description":description})
请注意,如果多个文档满足所提供的查询,mongo将返回它找到的第一个文档。
如果您在使用GameSpark时有任何其他问题或遇到任何问题,可以通过 - https://support.gamesparks.net/support/home
联系我们的支持团队