Unity 对象引用的 Gamesparks 未设置为对象的实例

Gamesparks for Unity object reference not set to an instance of an object

我正在统一使用 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...");
            }
        });

那是我收到 "object reference not set to an instance of an object"

流的时候

如果我删除打印语句,它不会抛出错误。它似乎只是没有找到任何尖锐的描述,即使测试工具找到了。

我尝试了多种代码变体,但无法正常工作。

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

由于您的 'items' 字段包含您需要使用的数组

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

并遍历列表。

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

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

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

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