実績
実績機能は、実績の解除、実績進捗の報告、現在のゲームの全実績クリアに分かれます。実績 key はバックエンド設定と一致している必要があります。サンプル内の key は呼び出し方法を示すためだけに使っています。
サポートしているエンジン
Section titled “サポートしているエンジン”| エンジン | 状態 | 説明 |
|---|---|---|
| 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 経由で実績 API を呼び出すことを推奨します。
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 を安定した約束として扱わないでください。
セルフテスト
Section titled “セルフテスト”| エンジン | 確認項目 |
|---|---|
| Unity | 呼び出し後のログに success、duplicated、message が出る。全実績クリアでは deletedCount が返る。 |
| GameMaker | イベントキューで achievement_result または achievement_clear_result を受け取る。 |
| Godot | 呼び出し後に AchievementReported または AchievementsCleared signal が発火する。 |
よくある問題
Section titled “よくある問題”success=false: 実績 key が存在するか確認してください。duplicated=true: その実績は以前に解除済みであり、必ずしもエラーではありません。- 全実績クリアは、現在ログインしているユーザーの現在のゲーム内実績だけに影響します。通常はデバッグ、テスト、または明示的に許可されたリセット用途で使ってください。
- 結果がない: IGP デスクトップクライアントが接続済みか確認し、その後ゲームコードがイベントをポーリングまたは監視しているか確認してください。
- 段階式実績の進捗が異常: バックエンドの実績タイプと進捗報告値が一致しているか確認してください。