# 环境 API

> Manage logical data partitions using the Environments API.

[环境](./service-environments.md)是指 Unity Gaming Services（Unity 游戏服务）的逻辑分区，其中包含与项目关联的数据。

本节重点介绍 Core 包中的 Environments API。Environments API 的访问点是通过 `EnvironmentsApi` 单例。

```csharp
namespace Unity.Services.Core.Environments.Editor
{
    public class EnvironmentsApi
    {
        public static IEnvironmentsApi Instance { get; }
    }
}
```

## 环境选择器##environment-selector

Environment Selector（环境选择器）为所有支持的服务设置当前环境。


**Frame:**
![](/api/media?file=/services/media/images/global-environment-selector.png)

要在 Unity 编辑器中选择环境，请执行以下操作：

1. 转到 **Edit（编辑）**> **Project Settings（项目设置）**> **Services（服务）**> **Environments（环境）**。
2. 在 **Editor Environment（编辑器环境）** 字段中，选择要使用的环境。

您可以在 Unity Dashboard 中管理环境，例如添加或删除环境。

## 活跃环境##active-environment

您可以通过名称或 GUID 访问活跃环境。当环境发生变化时，您可以通过 `PropertyChanged` 事件收到通知。

```csharp
namespace Unity.Services.Core.Environments.Editor
{
    public class EnvironmentsApi
    {
        public string ActiveEnvironmentName { get; set; }
        public System.Nullable<System.Guid> ActiveEnvironmentId { get; }
        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
    }
}
```

## 环境管理##environment-management

使用 `EnvironmentsApi` 可以刷新环境列表，获取所有环境，设置活跃环境，以及远程验证活跃环境是否仍然存在。

```csharp
namespace Unity.Services.Core.Editor.Environments
{
    public class EnvironmentsApi
    {
        public System.Collections.Generic.IReadOnlyCollection<EnvironmentInfo> Environments { get; }
        public System.Threading.Tasks.Task RefreshAsync();
        public void SetActiveEnvironment(EnvironmentInfo environment);
        public System.Threading.Tasks.Task<ValidationResult> ValidateEnvironmentAsync();
    }
}
```

## 构建和运行时##build-and-runtime

在构建和运行时，所选环境使用优先级回退机制来选择正确的环境：

`InitializationOptions` >> Environment Selector（环境选择器）>> 默认环境 (`"production"`)。

`InitializationOptions` 的使用方式如 Services Core SDK [初始化示例](./services-core-api.md#initialization-example)中所示。

## UI 组件##ui-components

`EnvironmentView` 组件会显示当前活跃环境并允许快速访问全局 [Environment Selector（环境选择器）](#environment-selector)。


**Frame:**
![](/api/media?file=/services/media/images/environment-view.png)

以下示例显示了如何使用 UXML 将此组件添加到工具栏中：

```uxml
<ui:UXML
    xmlns:uie="UnityEditor.UIElements"
    xmlns:coreUi="Unity.Services.Core.Editor.Environments.UI"
    editor-extension-mode="True">
    <uie:Toolbar>
        <coreUi:EnvironmentView />
    </uie:Toolbar>
</ui:UXML>
```
