# IGP Unity SDK 接入指南

本文档对应 Unity `2022.3.62f3c1` 和 IGP Unity SDK `0.3.3`。

## 安装

正式交付按模块同时提供 `.unitypackage` 与离线 UPM `.tgz`，同一模块选择其中一种载体。至少安装 Core：

- `cn.indiegp.sdk.unity-0.3.3.unitypackage`

按需继续导入 Multiplayer、Compliance、Game Kit 等可选包。可选包依赖 Core；使用 Multiplayer 时应先导入 Core，再导入 Multiplayer。

仓库内开发也可以通过 Unity Package Manager 的 `Packages/manifest.json` 使用本地 `file:` 依赖，路径指向 `adapters/unity/Runtime/` 下的对应 package。

使用 UPM tarball 时，先通过 `Window > Package Manager > + > Add package from tarball` 安装 `core-igp-0.3.3.tgz`，再按需安装 `multiplayer-igp-0.3.3.tgz`、`compliance-igp-0.3.3.tgz` 和 `game-kit-igp-0.3.3.tgz`。外层文件名以功能名开头并保留 `igp` 归属标识，归档内部仍使用 `package.json` 中的正式 UPM 包名。

## 配置

在场景对象上添加 `IGPRuntimeManager`，创建并填写 SDK 配置，最重要的配置是平台分配的 `appId`。常规接入不需要填写游戏运行目录或可执行文件路径。

SDK 不会自动扫描、创建或修改接入工程中的场景、Prefab、配置资源或 Project Settings；这些资源由接入者显式创建和引用。

## 初始化

将 [`Examples/CoreQuickstart.cs.txt`](./Examples/CoreQuickstart.cs.txt) 复制到项目脚本目录，去掉 `.txt` 后缀，再挂到包含 `IGPRuntimeManager` 的场景对象或显式绑定 runtime 引用。

游戏通过 Desktop 启动后，Core 会建立 desktop session。业务代码应等待 `InitializeAsync()` 成功后再调用用户、授权、成就等能力，并订阅对应公开事件处理运行时状态变化。

授权、用户信息与成就走 desktop session；房间、realtime 和 KCP/TCP 等 Multiplayer 能力仍使用 hosted session。reliable transport 默认是 `KcpOnly`；需要 TCP 时在 `IGPMultiplayerRuntime` 上选择 `TcpOnly` 或 `PreferTcp`。详细 API 和事件语义以导入包内的 `Documentation` 为准。

## 代码案例

- [`CoreQuickstart.cs.txt`](./Examples/CoreQuickstart.cs.txt)：最小初始化。
- [`AchievementsExample.cs.txt`](./Examples/AchievementsExample.cs.txt)：解锁成就和上报进度。
- [`ComplianceExample.cs.txt`](./Examples/ComplianceExample.cs.txt)：刷新并监听防沉迷状态。
- [`GameKitExample.cs.txt`](./Examples/GameKitExample.cs.txt)：读取当前用户资料与排行榜列表。
- [`MirrorTransportExample.cs.txt`](./Examples/MirrorTransportExample.cs.txt)：仅在项目已安装 Multiplayer 与 Mirror 时使用；复制进工程时去掉 `.txt` 后缀。

代码案例是独立文件，不附带完整工程、场景或 Prefab。所有案例都以 `.cs.txt` 交付，避免导入 `.unitypackage` 时自动参与编译；复制需要的文件后去掉 `.txt` 后缀。接入者需要在自己的工程中创建对象、挂载组件并填写引用。
