# 设置 Cloud Code

> Set up Cloud Code scripts or modules to use with the Triggers service.

要使用 Triggers 服务，您应该定义一个 Cloud Code 脚本或 Cloud Code 模块。

| ###### Cloud Code C# 模块使用类型安全 (type-safe) 的编程语言和功能强大的 .NET 组件编写服务器端代码。使用 NuGet 等工具捆绑动态链接库 (DLL)，获取项目中需要的其他内容。[开始使用 Cloud Code C# 模块。](/cloud-code/modules/overview.md)                                                   |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| ###### Cloud Code JavaScript 脚本使用易于迭代的语言编写服务器端代码。如果您拥有 JavaScript 前端经验，可以利用相同的生态系统。通过 Cloud Code 命令行已支持的 CommonJS 和 ECMAScript 模块系统，将您的代码与可重用的代码段捆绑在一起。[开始使用 Cloud Code JavaScript 脚本。](/cloud-code/scripts/overview.md) |

此脚本或模块会在触发器触发时执行，但前提是您定义了触发器配置。

## 执行返回值##execution-return-value

目前，Triggers 服务不会处理来自 Cloud Code 的任何返回值。请通过创建直接执行游戏逻辑的模块和脚本来解决这个问题。

## 上下文属性##context-attributes

由于 Triggers 服务由服务帐户进行身份验证，因此在执行期间，某些属性在脚本的 `context` 对象和模块的 `IExecutionContext` 接口中不可用。

由于缺少玩家身份验证，以下属性不可用：

* `playerId`
* `accessToken`
* `unityInstallationId`
* `analyticsUserId`
* `correlationId`

确保您的脚本和模块不依赖于这些属性。

> **Note:**
>
> **注意：** 您仍然可以使用 `serviceToken` 进行身份验证。这种情况下，您可以调用其他 UGS 服务（例如 Lobby 服务）来获取玩家数据。

## 跨玩家数据##cross-player-data

要使用 Cloud Code 修改跨玩家数据，您需要使用 `serviceToken` 进行身份验证并调用其他 UGS 服务。

在编写 Cloud Code 逻辑时，您无法从 context 对象中获取玩家 ID。但是，当触发器与从 UGS 发出的事件配对时，您通常可以从事件有效负载中获取玩家 ID，并处理玩家数据。如需详细了解支持的事件及其有效负载，请参阅[支持的 UGS 事件](/triggers/manage-events/supported-ugs-events.md)。

您还可以调用其他 Unity Gaming Services（Unity 游戏服务）来获取玩家数据。例如，您可以通过在脚本或模块中调用 Leaderboards 或 Lobby 服务，从这些服务中获取玩家。

请参阅[使用示例：用游戏内货币奖励排名靠前的玩家](../tutorials/use-cases/reward-top-players)以查看示例。

## 有效负载参数##payload-parameters

您可以使用一组参数来调用 Cloud Code 模块和脚本。这些参数在事件的有效负载中定义。计划性事件的有效负载由用户在计划配置中定义。对于 UGS 事件，请参阅[支持的 UGS 事件](/triggers/manage-events/supported-ugs-events.md)，了解事件有效负载的内容。

这些参数的定义方式应与任何其他脚本或模块的参数定义方式相同。

触发事件的有效负载用作 Cloud Code 调用的参数集；与事件负载中的键匹配的所有已定义参数都会填充。所有事件有效负载都会自动包括 `projectId`、`environmentId` 和 `correlationId`。

例如，如果以下脚本有一个字符串参数 `name`：

### JavaScript##javascript

```javascript
module.exports = async ({ params, context, logger }) => {
  return "Hello " + params.name;
};
```

或者以下模块中的函数 `SayHello` 有一个字符串参数 `name`：

```csharp
using Unity.Services.CloudCode.Core;

namespace ExampleModule;

public class MyModule
{
    [CloudCodeFunction("SayHello")]
    public string Hello(string name)
    {
        return $"Hello, {name}!";
    }
}
```

则可以按如下方式定义计划配置的有效负载：

```json
{
  "name": "hello-world-test",
  "eventName": "hello-world-test",
  "type": "one-time",
  "schedule": "2023-08-28T15:20:00Z",
  "payloadVersion": 1,
  "payload": "{\"name\": \"World\"}"
}
```

当触发器触发时，会在填充有效负载参数的情况下执行 Cloud Code 脚本或模块。

> **Note:**
>
> **注意：** 有限制。请参阅[限制](/triggers/limits.md)以获取更多信息。
