0

我正在统一使用 GameSparks,并且正在尝试从数据库中提取某些数据。

我设置了一个名为“getItem”的事件,其属性“type”设置为“used in script”。

我设置了一个云代码事件以通过使用“类型”属性访问该事件,该属性实际上将访问数据中的描述字段。

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"
}

在检查器中,我看到 Statement Count: 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 语句,它不会抛出错误。即使测试工具找到了,它似乎也没有找到任何关于尖锐的描述。

我已经尝试了许多代码变体,但无法使其正常工作。

4

1 回答 1

1

正如您正确发现的那样,错误来自您的响应中的数据与您用于检索它的 getter 之间的不匹配。

由于您的“项目”字段包含您需要使用的数组

列表数据 = response.ScriptData.GetGSDataList("items");

并遍历列表。

要返回单个对象而不是数组,您可以将云代码查询更改为:

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

请注意,如果多个文档满足提供的查询,mongo 将返回它找到的第一个文档。

如果您在使用 GameSparks 时有任何其他问题或遇到任何问题,可以通过 - https://support.gamesparks.net/support/home联系我们的支持团队

于 2017-06-22T18:23:27.700 回答