成就
成就能力分为三类:解锁成就、上报成就进度、清除当前游戏全部成就。成就 key 必须与后台配置一致,示例中的 key 仅用于说明调用方式。
| 引擎 | 状态 | 说明 |
|---|---|---|
| Unity | Preview | 主包提供公开调用入口。 |
| GameMaker | Preview | Windows runtime 提供解锁、进度上报和清除全部成就。 |
| Godot | 开发中 | 预览 runtime 已有成就调用入口。 |
- 已完成 启动与连接。
- 后台已经创建对应成就。
- 游戏代码中的成就 key 和后台配置一致。
- Unity / GameMaker / Godot 当前都通过本机 IGP 桌面客户端完成成就调用。
using UnityEngine;using IGP.UnitySDK;
public sealed class IGPAchievementButtons : MonoBehaviour{ [SerializeField] private IGPRuntimeManager runtimeManager;
public async void UnlockFirstSession() { var result = await IGPSDK.UnlockAchievementAsync( runtimeManager, "first_session");
Debug.Log($"Unlock success={result.success}, duplicated={result.duplicated}"); }
public async void AddMatchProgress() { var result = await IGPSDK.ReportAchievementProgressAsync( runtimeManager, "matches_played", 1, "match_complete");
Debug.Log($"Progress success={result.success}, duplicated={result.duplicated}"); }
public async void ClearAllAchievements() { var result = await IGPSDK.ClearAchievementsAsync(runtimeManager); Debug.Log($"Clear success={result.success}, deleted={result.deletedCount}"); }}// 解锁成就igp_unlock_achievement( "first_session", "", 0, global.igp_app_id);
// 上报进度igp_report_achievement_progress( "matches_played", 1, "match_complete", "", 0, global.igp_app_id);
// 清除当前游戏全部成就igp_clear_achievements(global.igp_app_id);结果从事件队列读取。
var evt = igp_poll_event();while (!is_undefined(evt)){ if (evt.type == "achievement_result") { show_debug_message("Achievement success: " + string(evt.success)); } else if (evt.type == "achievement_clear_result") { show_debug_message("Cleared achievements: " + string(evt.deleted_count)); }
evt = igp_poll_event();}Godot 当前建议通过 autoload 调用成就接口。
using Godot;using IGP.GodotSDK.Autoload;
public partial class AchievementPanel : Control{ private IGPGodotAutoload IGP => GetNode<IGPGodotAutoload>("/root/IGP");
public async void UnlockFirstSession() { await IGP.UnlockAchievementAsync("first_session"); }
public async void AddMatchProgress() { await IGP.ReportAchievementProgressAsync( "matches_played", 1, "match_complete"); }
public async void ClearAllAchievements() { await IGP.ClearAchievementsAsync(); }}Godot 仍处于开发中,正式项目不应将当前 API 视为稳定承诺。
| 引擎 | 检查点 |
|---|---|
| Unity | 调用后日志中出现 success、duplicated、message;清除时会返回 deletedCount。 |
| GameMaker | 事件队列中收到 achievement_result 或 achievement_clear_result。 |
| Godot | 调用后触发 AchievementReported 或 AchievementsCleared signal。 |
常见问题 / 排查
Section titled “常见问题 / 排查”success=false:先检查成就 key 是否存在。duplicated=true:表示该成就之前已经解锁,不一定是错误。- 清除全部成就只影响当前游戏下当前登录用户的成就记录,通常只建议用于调试、测试或后台明确允许的重置流程。
- 没有任何结果:先确认 IGP 桌面客户端已连接,再确认游戏代码是否在轮询或监听事件。
- 分步成就进度异常:确认后台成就类型和进度上报值是否匹配。