SDK API 概览
MCE SDK 提供了一个清晰、稳定的公共 API 接口面,用于从你的游戏代码与引擎交互。所有 SDK 接口都位于 OpenMon.MCE.SDK 命名空间中。公共 SDK API 随 Indie、Pro、Source 和 Studio 版提供;Starter 版的 API 是封闭的。
如果它不在这四个接口之中,就不属于 SDK 契约的一部分。
设计原则
- 基于接口:所有公共 API 都以接口而非具体类的形式公开。这使得实现可以演进,而不会破坏你的代码。
- 以读为主:大多数 SDK 方法都是只读查询。修改通过引擎的内部系统进行(CommandGraph、Inspector 等)。
- 事件驱动:关键的状态变化通过 C# 事件传达。
- 由 Zenject 注入:通过
[Inject]特性访问 SDK 接口。
入口点
主入口点是 IMonsterCaptureEngine:
[Inject] private IMonsterCaptureEngine engine;
通过这个接口,你可以访问所有子系统:
| 属性 | 接口 | 用途 |
|---|---|---|
engine.Database | IMonsterDatabase | 查询怪物、招式、道具、属性 |
engine.Battle | IBattleSystem | 战斗状态与事件 |
engine.Player | IPlayerData | 玩家队伍、金钱、名字、徽章 |
engine.SaveSystem | ISaveSystem | 存档/读档操作 |
engine.Version | string | 引擎版本字符串 |
快速示例
using OpenMon.MCE.SDK;
using Zenject;
public class GameDashboard : MonoBehaviour
{
[Inject] private IMonsterCaptureEngine engine;
private void Start()
{
// Query database
var allMonsters = engine.Database.GetAllMonsters();
Debug.Log($"Database has {allMonsters.Count} monster species");
// Check player state
Debug.Log($"Player: {engine.Player.PlayerName}");
Debug.Log($"Team size: {engine.Player.PlayerRoster.RosterSize}");
Debug.Log($"Money: {engine.Player.Money}");
Debug.Log($"Badges: {engine.Player.BadgeCount}");
// Listen to battle events
engine.Battle.OnBattleStarted += () => Debug.Log("Battle!");
engine.Battle.OnBattleEnded += (won) => Debug.Log($"Won: {won}");
// Save/load
if (engine.SaveSystem.HasSaveData(0))
Debug.Log("Save slot 0 has data");
}
}
数据库和玩家接口读取的是引擎的实时状态。战斗和存档接口(engine.Battle、engine.SaveSystem)是依赖尚未接通的引擎钩子的外观类:在依赖它们的事件之前,请先阅读 IBattleSystem 和 ISaveSystem 中的说明。
各接口的详细文档请参阅各自的 API 页面。