# 开始使用

> Follow this workflow to create a C# module in the Unity Editor and deploy it to the Cloud Code service.

本页介绍在 Unity 编辑器中创建 C# 模块并将其部署到 Cloud Code 服务所需的步骤。

> **Note:**
>
> **注意：** 仅 Unity 2021.3 及更高版本支持在 Unity 编辑器中集成模块。

工作流程中的示例创建一个简单的 Hello World C# 模块。要开始使用 Cloud Code 模块，请按照以下步骤操作：

1. [设置 Unity 编辑器：](#set-up-the-unity-editor)将 Unity Gaming Services（Unity 游戏服务）项目与 Unity 编辑器关联，并安装所需的包。
2. [创建 C# 模块引用文件：](#create-a-c-module-reference-file)在编辑器中创建一个模块引用文件，并将此文件关联到模块项目。
3. [生成新模块：](#generate-a-new-module)从 Deployment（部署）窗口生成一个新模块。
4. [生成绑定：](#generate-bindings)从解决方案生成客户端代码。
5. [部署该模块：](#deploy-the-module)将该模块部署到 Cloud Code 服务。
6. [从游戏调用模块函数：](#call-a-module-function-from-your-game)从游戏客户端调用模块终端。

> **Note:**
>
> **注意：** 如需了解创建和部署模块的其他创作方法，请参阅[编写模块](./how-to-guides/write-modules.md)。

## 视频演示##video-walkthrough

观看下面的视频，了解在 Unity 编辑器中创建 C# 模块并将其部署到 Cloud Code 服务的步骤。


[Video content](https://youtu.be/l_iD06qOu6Q)

## 设置 Unity 编辑器##set-up-the-unity-editor

要在编辑器中创建 Cloud Code 模块，您需要安装所需的包并将 Unity Gaming Services（Unity 游戏服务）项目与 Unity 编辑器关联。

### 关联项目##link-project

将 [Unity Gaming Services（Unity 游戏服务）项目](/cloud/projects.md)与 Unity 编辑器关联。您可以在 [Unity Dashboard](https://cloud.unity.com) 中找到您的 UGS Project ID。

如果您创建一个新的 Unity 项目，则可以在项目创建过程中将您的 Unity Gaming Services（Unity 游戏服务）项目与 Unity 编辑器关联。

如果您正在使用现有的 Unity 项目，则可以从 Services（服务）窗口将您的 Unity Gaming Services（Unity 游戏服务）项目与 Unity 编辑器关联。

1. 在 Unity 编辑器中，选择 **Edit（编辑）**> **Project Settings（项目设置）**> **Services（服务）**。

2. 关联您的项目。
   如果项目没有 Unity Project ID：

   1. 选择 **Create a Unity Project ID（创建 Unity Project ID）**> **Organizations（组织）**，然后从下拉选单中选择一个组织。
   2. 选择 **Create project ID（创建 Project ID）**。

   如果已有 Unity Project ID：

   1. 选择 **Use an existing Unity project ID（使用现有 Unity Project ID）**。
   2. 从下拉选单中选择组织和项目。
   3. 选择 **Link project ID（关联 Project ID）**。

此时将显示您的 Unity Project ID，并且项目现在已关联到 Unity 服务。

### 安装所需的包##install-required-packages

要在编辑器中创建 Cloud Code 模块，您需要安装以下包：

* Deployment
* Cloud Code（2.6.1 或更高版本）

> **Note:**
>
> **注意：** 请查看 [Unity - 手册：Package Manager（包管理器）窗口](https://docs.unity3d.com/Manual/upm-ui.html)，熟悉 Unity Package Manager（包管理器）界面。

您可以从 Unity 编辑器的 Package Manager（包管理器）窗口安装这些包并将其添加到可用包列表中：

1. 在 Unity 编辑器中选择 **Window（窗口）**> **Package Manager（包管理器）** 以打开 Package Manager（包管理器）窗口。
2. 选择 **+（添加）**> **Add package by name...（按名称添加包...）**。
3. 输入 `com.unity.services.deployment`。
4. 选择 **Add（添加）**。
5. 对 `com.unity.services.cloudcode` 重复以上步骤。

### 安装并设置 .NET##install-and-set-up-net

要在编辑器中部署 Cloud Code 模块，您需要安装 [.NET](https://dotnet.microsoft.com/en-us/)。

要在编辑器中设置默认的 .NET 路径，请按照以下步骤操作：

1. 在 Unity 编辑器中，打开 Preferences（偏好设置）窗口。
   * 在 Windows 上，选择 **Edit（编辑）**> **Preferences...（偏好设置...）**> **Cloud Code**。
   * 在 macOS 上，选择 **Unity** > **Settings...（设置...）**> **Cloud Code**。
2. 在 **.NET development environment（.NET 开发环境）** 部分中，将 **.NET path（.NET 路径）** 修改为实际安装路径。
3. 选择 **Apply（应用）**。

### 设置 Deployment（部署）窗口##set-up-the-deployment-window

在 Deployment（部署）窗口中可以将 Cloud Code 模块部署到远程环境。

如果安装了 Deployment 包，则可以从 Unity 编辑器访问该包。

* 在 Unity 编辑器版本 2021.3+ 中，选择 **Window（窗口）**> **Deployment（部署）**。
* 在 Unity 编辑器版本 2022+ 中，选择 **Services（服务）**> **Deployment（部署）**。

在使用 Deployment（部署）窗口之前，您需要选择要部署到的环境：

1. 在 Unity 编辑器中，打开 [**Deployment（部署）窗口**](#set-up-the-deployment-window)。
2. 在 Deployment（部署）窗口中，选择 **Deployment Settings（部署设置）**。
3. 从新的 Environments（环境）窗口的 **Editor Environment（编辑器环境）** 下拉选单中选择一个环境。

## 创建 C# 模块引用文件##create-a-c-module-reference-file

要在 Unity 编辑器中创建 Cloud Code 模块，您需要创建 Cloud Code C# 模块引用文件。该文件引用一个包含需要部署的 C# 模块项目的解决方案。

1. 在 Unity 编辑器的 Project（项目）窗口中右键单击，然后选择 **Create（创建）**> **Cloud Code C# Module Reference（Cloud Code C# 模块引用）**。
2. 将模块引用文件命名为 `HelloWorld`。
3. 按 **Enter（输入）**。


**Frame:**
![](/api/media?file=/cloud-code/media/images/create-ref-file.png)

现在，新的模块引用会显示在 Project（项目）窗口和 Deployment（部署）窗口中。

## 生成新模块##generate-a-new-module

Cloud Code 模块是简单的 .NET 项目，其中公开了游戏客户端可以调用的终端。在 Unity 编辑器中，生成模块时会使用可修改的模块模板创建一个解决方案。要详细了解 Cloud Code 模块的结构，请参阅[模块结构](./how-to-guides/module-structure.md)。

利用模块引用文件可以从 Deployment（部署）窗口生成新模块。生成的模块包含开始开发模块所需的基本设置。

1. 在 Unity 编辑器的 Project（项目）窗口中选择模块引用文件。
2. 在 [Inspector（检视面板）](https://docs.unity3d.com/Manual/UsingTheInspector.html)窗口中，单击 **Generate Solution（生成解决方案）**。

还可以直接从 Deployment（部署）窗口生成一个新模块。

1. 在 Unity 编辑器中，打开 [**Deployment（部署）窗口**](#set-up-the-deployment-window)。
2. 右键单击模块引用文件，然后选择 **Generate Solution（生成解决方案）**。


**Frame:**
![](/api/media?file=/cloud-code/media/images/module-generate-solution.png)

您可以在 Unity 项目根目录下的 `HelloWorld` 文件夹中找到生成的模块。该模块是一个可以修改和扩展的 .NET 项目。

> **Note:**
>
> **注意**：Cloud Code 模块是 .NET 项目，因此它们使用 [NuGet Package Manager](https://docs.microsoft.com/en-us/nuget/what-is-nuget) 来管理依赖项。Cloud Code 模块需要 Cloud Code Authoring 包才能创建可调用的终端。这是一个可以安装到项目中的 NuGet 包，已经包含在生成的模块中。

## 生成绑定##generate-bindings

生成新模块后可以生成绑定。绑定是类型安全 (type-safe) 的客户端代码，您可以将其用于从游戏客户端调用模块终端。

1. 在 Unity 编辑器的 Project（项目）窗口中选择模块引用文件。
2. 在 [Inspector（检视面板）](https://docs.unity3d.com/Manual/UsingTheInspector.html)窗口中，选择 **Generate Bindings（生成绑定）**。

## 部署该模块##deploy-the-module

要使游戏客户端能够访问您的模块终端，您需要将模块部署到 Cloud Code 服务。您可以使用 [Deployment（部署）窗口](https://docs.unity3d.com/Packages/com.unity.services.deployment@latest/index.html?subfolder=/manual/deployment_window.html)来部署模块。

要部署模块，请执行以下操作：

1. 在 Unity 编辑器中，打开 [**Deployment（部署）窗口**](#set-up-the-deployment-window)。
2. 在 Project（项目）窗口中选择模块引用文件。
3. 在 Deployment（部署）窗口中，单击 **Deploy Selected（部署所选项）**。

如需了解更多信息，请查看 [Deployment 包手册](https://docs.unity3d.com/Packages/com.unity.services.deployment@latest)。

部署成功后，Project（项目）窗口中的模块引用文件旁边会显示一个绿色勾号标记。

## 从游戏调用模块函数##call-a-module-function-from-your-game

要确认部署成功，可以从游戏客户端调用模块终端。生成的模块包含一个名为 `SayHello` 的默认终端。

### SDK 设置##sdk-setup

要从游戏调用模块函数，首先需要在游戏客户端中设置 Cloud Code SDK。

1. 确保在 [Unity Dashboard](https://cloud.unity.com) 中通过 Cloud Code 页面启用该服务。
2. 确保 Cloud Code SDK 和 Authentication SDK 均已从 Unity 的 Package Manager（包管理器）进行安装。
3. 在 Unity 编辑器中创建新的 C# Monobehaviour 脚本。如需了解更多信息，请参阅 Unity 手册中的[创建和使用脚本](https://docs.unity3d.com/Manual/CreatingAndUsingScripts.html)。

> **Note:**
>
> **注意**：玩家必须拥有有效的玩家 ID 和访问令牌才能访问 Cloud Code 服务。在使用任何 Cloud Code API 之前，您需要使用 Authentication SDK 对玩家进行身份验证。

### 调用模块函数##call-the-module-function

以下示例说明了如何从游戏客户端中的模块 `HelloWorld` 调用模块函数 `SayHello`。

*C#*

```cs
using Unity.Services.Authentication;
using Unity.Services.CloudCode;
using Unity.Services.CloudCode.GeneratedBindings;
using Unity.Services.Core;
using UnityEngine;

public class TestModule : MonoBehaviour
{
    private async void Start()
    {
        // Initialize the Unity Services Core SDK
        await UnityServices.InitializeAsync();

        // Authenticate by logging into an anonymous account
        await AuthenticationService.Instance.SignInAnonymouslyAsync();

        try
        {
            // Call the function within the module and provide the parameters we defined in there
            var module = new HelloWorldBindings(CloudCodeService.Instance);
            var result = await module.SayHello("World");

            Debug.Log(result);
        }
        catch (CloudCodeException exception)
        {
            Debug.LogException(exception);
        }
    }
}
```

> **Important:**
>
> **重要**：如果一个模块在过去 15 分钟内没有收到任何流量，可能遇到了冷启动延迟。对该模块的所有后续调用会更快。

## 后续步骤##next-steps

了解部署第一个模块后的后续步骤。

| **主题**                                                          | **描述**                                      |
| --------------------------------------------------------------- | ------------------------------------------- |
| [模块结构](./how-to-guides/module-structure.md)                     | 熟悉模块结构。                                     |
| [与其他 Unity 服务集成](./how-to-guides/unity-services-integration.md) | 将模块与其他 Unity Gaming Services（Unity 游戏服务）集成。 |
| [与外部服务集成](./how-to-guides/external-services-integration.md)     | 将模块与外部服务集成。                                 |
| [编写单元测试](./how-to-guides/unit-testing.md)                       | 为模块编写单元测试。                                  |
