# LevelPlay 集成故障排除

> 排除常见的 LevelPlay 集成问题。

> **Note:**
>
> 您是否在寻找 LevelPlay 集成指南？如需了解如何在 Unity 编辑器中设置 LevelPlay 聚合，请参阅[管理 LevelPlay 集成](/grow/levelplay/sdk/unity/package-integration.md)。

将 LevelPlay 与 Unity 编辑器集成时，可能会遇到一些问题。请按照本指南对以下类型的问题进行故障排除：

* [重复类错误消息](#duplicated-classes-error-message)
* [无法从 LevelPlay SDK 中移除脚本符号](#scripting-symbol-can't-be-removed-from-the-levelplay-sdk)
* [缺少依赖项类错误消息](#missing-dependency-class-error-message)

## 使用 LevelPlayBannerPosition 指定横幅广告位置##specifying-banner-ad-position-with-levelplaybannerposition

### 错误##error

如果在使用 `LevelPlayBannerPosition` 作为枚举或整数时遇到编译错误，这是因为在 8.8.0 版中，`LevelPlayBannerPosition` 已从枚举更新为类。此更改会影响在代码中引用横幅广告位置的方式。

### 解决方案##resolution

在 LevelPlay Unity 包的 8.8.0 和 8.8.1 版本中，`LevelPlayBannerPosition` 已从枚举更改为类。更新后的 API 支持九个预定义的横幅广告位置，并允许通过创建 `LevelPlayBannerPosition` 对象来指定精确的 (x,y) 坐标。

如果在 Unity 编辑器控制台中看到 `LevelPlayBannerPosition` 编译错误，请参阅以下示例以了解一些可能的原因及其解决方案：

#### 示例 1：参数默认值错误##example-1:-parameter-default-value-error

传递具有默认枚举值的 `LevelPlayBannerPosition` 参数时，可能会看到编译错误。要解决此问题，请改用 null 值：

```csharp
// Use null for the default value, or pass a value explicitly
public LevelPlayBannerAd(string adUnitId, LevelPlayBannerPosition position = null) 
```

#### 示例 2：无效的开关或枚举比较##example-2:-invalid-switch-or-enum-comparisons

如果您的代码使用 switch 语句，或者以枚举或整数形式比较 `LevelPlayBannerPosition` 值，可能会看到编译错误。例如：

```csharp
switch (position) { 
case LevelPlayBannerPosition.BottomCenter: }
```

由于 `LevelPlayBannerPosition` 现在是一个类，因此应将此逻辑替换为直接的对象比较：

```csharp
if (position == LevelPlayBannerPosition.BottomCenter) { /* Handle case */ }
```

还可以在需要时使用 `Description` 属性比较横幅广告位置以便用于布局逻辑、日志记录或分析目的。例如：

```csharp
if (position.Description == "BottomCenter") {
    Debug.Log("Banner is at bottom-center.");
}
```

## 重复类错误消息##duplicated-classes-error-message

尝试构建或测试项目时，收到重复类错误消息 CSO433。此错误消息将标识发生重复的类及其出现在哪些程序集之中。以下是重复类错误消息的一个示例：

* The type `IronSourceMediationSettings` exists in both `Assembly-CSharp, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null` and `'Unity.LevelPlay, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null`

重复类错误有以下可能的原因：

* [更新了](#updated-the-ads-mediation-package-without-removing-the-unity-plugin) Ads Mediation 包但未移除 Unity 插件
* [更新了](#updated-unity) Unity 插件但未移除 Ads Mediation 包
* [重大](#significant-ads-mediation-package-updates)的 Ads Mediation 包更新

请参阅以下各节了解这些问题的描述和解决方案。

### 更新了 Ads Mediation 包但未移除 Unity 插件##updated-the-ads-mediation-package-without-removing-the-unity-plugin

在已安装 **.unitypackage** 文件（Unity 插件）的情况下，通过 **Ads Mediation** 包更新到了最新版本的 Unity LevelPlay。

#### 解决方案##resolution

在安装或更新 Ads Mediation 包之前，请移除 .unitypackage 文件（Unity 插件）。要移除该插件，请完成以下步骤：

1. 在 Unity 编辑器中打开您的项目，然后转到 **Assets（资源）**。
2. 在 \*\*Assets（资源）\*\*中，根据使用的 LevelPlay SDK 版本，执行以下操作之一：

* SDK v7.8.0 及更低版本：右键单击 **IronSource** > **Delete（删除）**。
* SDK v8.0.0：右键单击 **LevelPlay** > **Delete（删除）**。

> **Note:**
>
> 如果您使用的是 Developer Settings（开发者设置），请记录所有应用密钥或者您在 \*\*Advanced Mediation Settings（高级聚合设置）\*\*中所做的选择。在更新到最新版本的 LevelPlay SDK 后，您可以重新输入这些值。

### 更新了 Unity 插件但未移除 Ads Mediation 包##updated-unity

在已安装 **Ads Mediation** 包的情况下，通过 **.unitypackage** 文件更新到了最新版本的 Unity LevelPlay。

#### 解决方案##resolution

在安装或更新 Unity 插件之前，请移除 Ads Mediation 包。按照以下步骤从 Unity 编辑器中移除 Ads Mediation 包：

1. 在 Unity 编辑器中打开项目，然后转至 **窗口** > **软件包管理** > **Package Manager**。
2. 在 \*\*Package Manager（包管理器）\*\*中，选择 **Packages（包）**> **In Project（项目内）**。
3. 选择 **Ads Mediation** > **Remove（移除）**。
4. 从 Unity 编辑器打开您的项目，然后转到 **Assets（资源）**。
5. 在 \*\*Assets（资源）\*\*中，根据使用的 LevelPlay SDK 版本，执行以下操作之一：

* SDK v7.8.0 及更低版本：右键单击 **IronSource** > **Delete（删除）**。
* SDK v8.0.0：右键单击 **LevelPlay** > **Delete（删除）**。

6. 如果已安装 Mobile Dependency Resolver，还需右键单击 **Mobile Dependency Resolver** > **Delete（删除）**。

### 重大的 Ads Mediation 包更新##significant-ads-mediation-package-updates

您将 Ads Mediation 包从较低版本更新到了高得多的版本。

#### 解决方案##resolution

如果您的 Ads Mediation 包需要进行重大更新，您可能需要执行其他步骤以确保顺利升级。

例如，如果要从 v1.0.0 更新到 v8.0.0，则需要在更新时执行其他步骤。如需了解更多信息，请参阅 Unity Package Manager（包管理器）中的 Ads Mediation 包描述。

## 无法从 LevelPlay SDK 中移除脚本符号##scripting-symbol-can't-be-removed-from-the-levelplay-sdk

您从 LevelPlay SDK 中移除了 `LEVELPLAY_DEPENDENCIES_INSTALLED` 脚本符号，但它始终自动重新出现在 SDK 中。

### 原因##cause

从 SDK 中移除 `LEVELPLAY_DEPENDENCIES_INSTALLED` 脚本符号时，SDK 将始终自动重新添加此脚本符号。从 LevelPlay SDK Unity 包版本 8.0.0 开始，此脚本符号是必需的。

### 解决方案##solution

此问题没有已知的解决方案，因为从版本 8.0.0 开始，LevelPlay SDK 需要此脚本符号。此符号在删除后将始终自动重新添加。

## 缺少依赖项类错误消息##missing-dependency-class-error-message

在安装 Ads Mediation 包后，您收到了依赖项类错误消息。以下消息是可能缺少依赖项类警告的示例：

* The type or namespace name `Core` does not exist in the namespace `Unity.Services`.
* The type or namespace name `Newtonsoft` could not be found.
* The type or namespace name `EditorGameServiceFlagEnabler` could not be found.

### 原因##cause

如果 LevelPlay SDK Unity 包中的 `com.unity.services.core` 依赖项被移除或无法安装，则可能会发生这种情况。如果缺少此依赖项，控制台将显示一条错误消息，指出找不到哪些依赖项类。

### 解决方案##resolution

有两种方法可以解决缺少的 `com.unity.services.core` 依赖项：按名称手动安装 Services Core 包，或移除 `LEVELPLAY_DEPENDENCIES_INSTALLED` 脚本符号。

#### 在 Package Manager（包管理器）中安装 Services Core 包##install-the-services-core-package-in-package-manager

要解决缺少的依赖项，请执行以下操作在 Unity Package Manager（包管理器）中安装 Services Core 包：

1. 在 Unity 编辑器中打开项目，然后转至 **窗口** > **软件包管理** > **Package Manager**。
2. 在 \*\*Package Manager（包管理器）\*\*窗口中，选择 **+** 图标以打开下拉菜单，然后选择 \*\*Install package by name...（按名称安装包...）\*\*以手动输入包名称。
3. 在 \*\*Name（名称）\*\*字段中输入 `com.unity.services.core`，然后选择 **Install（安装）**。

#### 移除 LEVELPLAY\_DEPENDENCIES\_INSTALLED 脚本符号##remove-the-levelplay\_dependencies\_installed-scripting-symbol

还可以使用 `LEVELPLAY_DEPENDENCIES_INSTALLED` 脚本符号恢复 Services Core 包。移除后的脚本符号将自动重新添加。在重新安装过程中，`com.unity.services.core` 包也会自动重新安装。如果编辑器不显示 Services Core 包，可以使用此方法。

要解决缺少的依赖项，请执行以下操作，从 LevelPlay SDK Unity 包中删除 `LEVELPLAY_DEPENDENCIES_INSTALLED` 脚本符号：

1. 在 Unity 编辑器中打开项目，然后转到 **Edit（编辑）**> **Project Settings（项目设置）**> **Player（播放器）**。
2. 在 \*\*Other Settings（其他设置）\*\*面板中，向下滚动到 **Script Compilation（脚本编译）**。
3. 选择减号 (**−**) 以移除相应符号，然后选择 **LEVELPLAY\_DEPENDENCIES\_INSTALLED**。
4. 选择 \*\*Apply（应用）\*\*以保存所做的更改。

## 编辑器 6.0+ UPM 软件包安装错误##editor-6.0+-upm-package-install-error

### 错误##error

在 Unity 编辑器 6.0 及以上版本上，若您为 Ads Mediation (LevelPlay) 使用 `.unitypackage`，可能会因点击 **Quick Install**（快速安装）按钮而误安装 UPM 软件包，该按钮位于以下路径：Services（服务）> Ads Mediation (LevelPlay) > Install（安装）。这可能导致编译错误，且软件包无法正常工作。

### 解决方案##resolution

一个快速解决方案是通过 Package Manager（包管理器）移除 UPM 软件包：

1. 转到 Unity 编辑器顶部菜单，选择 **窗口** > **软件包管理** > **Package Manager**。
2. 查找已安装的 **Ads Mediation** 包。
3. 展开它，在右侧面板查看详细信息。
4. 选择 **Remove**（移除）卸载 UPM 软件包。

按照上述步骤操作后，您可以将 `.unitypackage` 恢复至正常状态并解决问题。

## 移除 Ads Mediation 包##remove-the-ads-mediation-package

要从 Unity 编辑器中移除 Ads Mediation 包，您需要完成以下三个任务：

1. [移除](#remove-the-ads-mediation-package) Ads Mediation 包。
2. [删除](#delete-ads-mediation-assets) Ads Mediation 资源。
3. [删除](#delete-the-levelplay-scripting-symbol) LevelPlay 脚本符号。

按照以下步骤从 Unity 编辑器中移除 Ads Mediation 包：

1. 在 Unity 编辑器中打开项目，然后转至 **窗口** > **软件包管理** > **Package Manager**。
2. 在 Package Manager（包管理器）中，选择 **Packages（包）**> **In Project（项目内）**。
3. 选择 **Ads Mediation** > **Remove（移除）**。

## 删除 Ads Mediation 资源##delete-ads-mediation-assets

移除 Ads Mediation 包时，也请同时删除 LevelPlay 资源。您可能还需要移除其他文件（如果安装了这些文件）。请参阅以下说明，了解如何删除必要的 Ads Mediation 资源。

### LevelPlay 资源##levelplay-assets

移除 Ads Mediation 包后，需要删除 LevelPlay 资源。根据所使用的 LevelPlay SDK 版本，该过程会略有不同。按照以下步骤移除 LevelPlay 资源：

1. 在 Unity 编辑器中打开您的项目，然后转到 **Assets（资源）**。
2. 在 \*\*Assets（资源）\*\*中，根据使用的 LevelPlay SDK 版本，执行以下操作之一：

* SDK v7.8.0 及更低版本：右键单击 **IronSource**，然后选择 **Delete（删除）**。
* SDK v8.0.0：右键单击 **LevelPlay**，然后选择 **Delete（删除）**。

### Ads Mediation 示例##ads-mediation-sample

如果导入了 Ads Mediation 示例，请在移除 Ads Mediation 包时也将该示例删除。按照以下步骤删除 Ads Mediation 示例：

1. 在 Unity 编辑器中打开您的项目，然后转到 **Assets（资源）**> **Samples（示例）**> **Ads Mediation**。
2. 右键单击 **Ads Mediation 示例**，然后选择 **Delete（删除）**。

### Mobile Dependency Resolver##mobile-dependency-resolver

如果安装了 Mobile Dependency Resolver，请通过执行以下操作将其删除：

1. 在 Unity 编辑器中打开您的项目，然后转到 **Assets（资源）**。
2. 右键单击 **Mobile Dependency Resolver**，然后选择 **Delete（删除）**。

## 删除 LevelPlay 脚本符号##delete-the-levelplay-scripting-symbol

删除 Ads Mediation 包及其资源后，请按照以下步骤移除 `LEVELPLAY_DEPENDENCIES_INSTALLED` 脚本符号：

1. 在 Unity 编辑器中打开项目，然后转到 **Edit（编辑）**> **Project Settings（项目设置）**。
2. 在设置列表中，转到 **Player（播放器）或 File（文件）**> **Build Settings（构建设置）**> **Player Settings（播放器设置）**。
3. 向下滚动到 **Other Settings（其他设置）**> **Script Compilation（脚本编译）**。
4. 右键单击脚本符号 **LEVELPLAY\_DEPENDENCIES\_INSTALLED**，然后选择 **Delete（删除）**。
