事件

调度程序服务和 Unity 游戏服务会生成事件。然后,这些事件将被发送到触发器服务,触发器服务会将事件与配置进行匹配,然后执行相应的云代码脚本或模块。

发出的事件

调度程序服务和 Unity 游戏服务会发出事件,你可以将触发器连接到这些事件。

由谁发出可定制事件有效负载发出时间用例
Unity 游戏服务预定义,包含特定于事件的有效负载和版本控制玩家或游戏状态更改当你想在你的游戏或玩家状态发生变化时触发云代码脚本或模块作为响应时,请使用 UGS 发出的事件。
调度程序服务由用户在计划配置中创建在用户定义的设置或循环时间点当你想控制何时触发云代码脚本或模块时,请使用调度程序服务发出的事件。

交付语义

默认情况下,事件具有至少一次交付语义。这意味着所有事件都保证至少处理一次,但在出现网络问题的情况下可能会被多次处理。为了避免这种情况,建议的最佳做法是创建幂等的云代码脚本和模块。

事件结构

所有事件都包含事件类型、有效负载版本并携带有效负载。

字段描述示例
eventType事件类型是一个字符串,包含发出服务的名称、事件名称和有效负载版本。事件类型也用于触发器配置中创建关联关系。com.unity.services.scheduler.example-event.v1
payloadVersion有效负载版本是一个整数,表示有效负载的版本。1
payload有效负载是一个字符串,包含事件数据。它将作为脚本或模块参数传递给云代码。"{\"someBoolean\": true, \"someString\": \"something\"}"

事件类型根据它是调度程序服务还是 UGS 发出的而略有不同。

事件类型由谁发出有效负载版本有效负载
com.unity.services.scheduler.example-event.v1调度程序服务1用户定义
com.unity.services.player-auth.signed-up.v1身份验证服务1预定义
com.unity.services.player-auth.signed-in.v1身份验证服务1预定义
com.unity.services.cloud-save.key-saved.v1云保存服务1预定义
com.unity.servics.leaderboards.reset.v1排行榜服务1预定义
com.unity.servics.leaderboards.score-submitted.v1排行榜服务1预定义

你可以通过在计划配置中定义事件名称、有效负载版本和有效负载来自定义调度程序服务发出的事件。UGS 发出的事件根据事件类型具有不同的有效负载结构,并且无法定制。

有关每个事件类型返回的内容的更多信息,请参阅 支持的 UGS 事件

有效负载版本控制

有效负载版本控制有助于避免重大更改。每个事件都包含事件有效负载的版本控制。

例如,com.unity.services.player-auth.signed-up.v1 是身份验证服务发出的事件类型,有效负载版本为 1。这允许为同一事件的不同有效负载版本设置不同的触发器。

Note: Payload versioning is supported for both scheduled events and events emitted by UGS. However, while you can customize the payload version and content for scheduled events, you cannot customize events emitted by UGS.

计划事件有效负载

调度程序服务发出的事件具有可定制的有效负载。有效负载是在计划配置中定义的。

例如,如果你想在计划事件有效负载中添加新字段,你可以创建一个新的有效负载版本,并创建一个触发器来使用该新版本的有效负载。

计划配置可能如下所示

{
"name" : "recurring-schedule",
"eventName": "example-event",
"type": "recurring",
"schedule": "0 0 * * *",
"payloadVersion": 1,
"payload": "{\"someBoolean\": true, \"someString\": \"something\"}"
}

上面的示例会产生一个事件类型为 com.unity.services.scheduler.example-event.v1 的事件。

你可以为该事件类型设置一个触发器

{
"name" : "example-trigger",
"eventType" : "com.unity.services.scheduler.example-event.v1",
"actionUrn" : "urn:ugs:cloud-code:my-script",
"actionType" : "cloud-code"
}

如果你想在事件有效负载中添加新字段,你可以创建一个新的有效负载版本,并创建一个触发器来使用该新版本的有效负载。

{
"name" : "recurring-schedule",
"eventName": "example-event",
"type": "recurring",
"schedule": "0 0 * * *",
"payloadVersion": 2,
"payload": "{\"someBoolean\": true, \"someString\": \"something\", \"someNewField\": \"something else\"}"
}

这会导致一个事件类型为 com.unity.services.scheduler.example-event.v2 的事件。这允许你将一个新的触发器连接到该新事件类型。

计划事件

要发出计划事件,你必须创建一个计划配置。有关更多信息,请参阅 计划事件

通过部署计划配置,你可以创建在设置或循环时间点发出的事件。

以下是一个示例计划配置

{
"name" : "example-schedule",
"eventName": "example-event",
"type": "recurring",
"schedule": "0 0 * * *",
"payloadVersion": 1,
"payload": "{\"someBoolean\": true, \"someString\": \"something\"}"
}
  • name:计划的名称。它必须在每个项目中唯一。
  • eventName:事件的项目范围名称,用于为触发器组合事件类型。
  • type:计划的类型。它必须是 one-timerecurring
  • schedule:指定应何时触发事件。它必须是时间戳或 cron 表达式,具体取决于 type 字段。
  • payloadVersion:表示有效负载版本的整数,用于为触发器组合事件类型。
  • payload:用作事件有效负载的 JSON 对象,用于将参数转发到云代码脚本或模块。

Note: Limits apply. Refer to Limits for more information.

一次性计划

一次性计划是在特定时间执行的单个事件。它可能如下所示

{
"name" : "one-time-schedule",
"eventName": "example-event",
"type": "one-time",
"schedule": "2020-01-01T00:00:00Z",
"payloadVersion": 1,
"payload": "{\"someBoolean\": true, \"someString\": \"something\"}"
}

schedule 字段是 RFC3339 时间戳,定义了何时触发事件。

Note: The timestamp must be declared in the future.

循环计划

循环计划是在特定时间间隔执行的事件系列。它可能如下所示

{
"name" : "recurring-schedule",
"eventName": "example-event",
"type": "recurring",
"schedule": "0 0 * * *",
"payloadVersion": 1,
"payload": "{\"someBoolean\": true, \"someString\": \"something\"}"
}

schedule 字段是 cron 表达式,定义了何时触发事件。

与触发器的重叠

有关事件如何与触发器绑定的信息,请参阅 触发器结构