Wortal SDK
インストール
- git URLからWortal SDK Unity パッケージをインストールします:
https://github.com/Digital-Will-Inc/wortal-sdk-unity.git 
- ツールバーから Wortal WebGL テンプレートをインストールします:
Wortal/Install WebGL Template 
- ツールバーから必要なプロジェクト設定を行う:
Wortal/Set Project Settings 
使い方
広告
インタースティシャル広告では、レベルの達成や切り替えの合間に表示が可能です。
// プレイヤーがレベルを達成。
Wortal.Ads.ShowInterstitial(Placement.Next, "NextLevel", PauseGame, ResumeGame);
// プレイヤーがゲームを一時停止。
Wortal.Ads.ShowInterstitial(Placement.Pause, "PausedGame", PauseGame, ResumeGame);
// プレイヤーがアプリ内課金ページにアクセス。
Wortal.Ads.ShowInterstitial(Placement.Browse, "BrowseShop", PauseGame, ResumeGame);
リワード広告は、プレイヤーが動画広告を最後まで視聴するなどの条件を満たした場合に、報酬を与える広告タイプです。必ずプレイヤーに通知し、許可を受けてから表示する必要があります。
// この例では、広告の条件達成とは関係なく、ゲームが進みます。
// 例:プレイヤーは広告を視聴することでボーナスコインを取得できますが、その結果に関わらずゲームは続行されます。
Wortal.Ads.ShowRewarded("BonusCoins", PauseGame, ResumeGame, DontReward, RewardPlayer);
// この例では、広告の条件達成と関係して、ゲームが進みます。
// 例:プレイヤーはゲームオーバーの際、広告を視聴することで復活できますが、広告をスキップするとそのレベルを失います。
Wortal.Ads.ShowRewarded("ReviveAndContinue", PauseGame, ResumeAudio, EndGame, RevivePlayerAndContinue);
注: プレーヤーは、adViewed コールバックでのみ報酬を受ける必要があります。
アナリティクス
Wortalのアナリティクス APIを活用することによって、ゲームイベントを追跡し、プレイヤーのゲーム内アクティビティを把握することが可能です。このデータは、Wortalのダッシュボードで表示できます。
// レベルの開始をログ。
Wortal.Analytics.LogLevelStart("Level 3");
// レベルの終了をログ。名前が一致する場合、ゲーム時間を記録します
// logLevelStart() の最後の呼び出し名。
Wortal.Analytics.LogLevelEnd("Level 3", "100", true);
// プレイヤーのゲーム内の選択行動をログします。ゲームのバランスを取るのに役立ちます。
// そしてプレイヤーが多く利用するコンテンツを把握できます。
Wortal.Analytics.LogGameChoice("Character", "Blue");
アチーブメント
Achievements API は、プレイヤーのゲーム内での進捗を追跡するために使用されます。特定のタスクを完了したプレイヤーに報酬を与えたり、プレイヤーの進捗を追跡することが可能です。
// アチーブメントをアンロックする。
Wortal.Achievements.UnlockAchievement("achievementID",
        success => Debug.Log("Achievement Unlocked: " + success),
        error => Debug.Log("Error Code: " + error.Code + "\nError: " + error.Message));
// プレイヤーのアチーブメントの進捗状況を取得する。
Wortal.Achievements.GetAchievements(achievements =>
    {
        foreach (Achievement achievement in achievements)
        {
            Debug.Log(achievement.Name);
        }
    },
    error => Debug.Log("Error Code: " + error.Code + "\nError: " + error.Message));
コンテキスト
Context APIは、プレイヤー同士をつなぎ、ゲームセクションの参加、コンテンツの共有、またメッセージのやり取り等に活用できます。
// 友達をゲームに招待する。プレーヤーの現在のコンテキストを切り替えない。
Wortal.Context.InviteAsync(payload,
    () => Debug.Log("New context: " + Wortal.Context.GetID()),
    error => Debug.Log("Error Code: " + error.Code + "\nError: " + error.Message));
// このゲームのアクティビティを友達と共有する。
Wortal.Context.ShareAsync(payload,
    shareResult => Debug.Log("Number of shares: " + shareResult),
    error => Debug.Log("Error Code: " + error.Code + "\nError: " + error.Message));
// ContextPayloadの例
var payload = new ContextPayload
{
    Image = "dataURLToBase64Image",
    Text = new LocalizableContent
    {
        Default = "Play",
        Localizations = new Dictionary<string, string>
        {
            {"en_US", "Play"},
            {"ja_JP", "プレイ"},
        },
    },
    Data = new Dictionary<string, object>
    {
        {"current_level", 1},
    },
};
コンテキスト・ペイロード・テンプレート
Context API で使用するペイロードを簡単に作成・管理するため、 Wortal/Context Payload Template メニューから ContextPayloadTemplates を作成することができます。
アプリ内課金
アプリ内課金(IAP)は、プラットフォームでのゲーム内トランザクションの際に使用されます。このプロセスは、プレイされているプラットフォームによって異なりますが、IPは変わりません。
// プレイヤーが購入可能なアイテムリストを確認する。
Wortal.IAP.GetCatalog(
    catalog => Debug.Log(catalog[0].Title),
    error => Debug.Log("Error Code: " + error.Code + "\nError: " + error.Message));
// アイテムを購入する。
Wortal.IAP.MakePurchase(new WortalIAP.PurchaseConfig
    {
        ProductID = "id.code.for.product",
    },
    purchase => Debug.Log(purchase.PurchaseToken), // このトークンを使って購入する
    error => Debug.Log("Error Code: " + error.Code + "\nError: " + error.Message));
リーダーボード
Leaderboard APIを活用すると、プラットフォームのリーダーボード機能にアクセスが可能に。プレイヤーたちのスコアを追跡し、ランク付けすることができます。
// 上位10位にランクづけられたリーダーボードを取得する。
Wortal.Leaderboard.GetEntries("global", 10,
    entries => Debug.Log("Score: " + entries[0].Score),
    error => Debug.Log("Error Code: " + error.Code + "\nError: " + error.Message));
// プレーヤーのスコアをリーダーボードに追加する。
Wortal.Leaderboard.SendEntry("global", 100,
    entry => Debug.Log("Score: " + entry.Score),
    error => Debug.Log("Error Code: " + error.Code + "\nError: " + error.Message));
通知
Notifications API は、プレイヤーに通知を送信するために使用されます。これは、ゲーム内のイベントをプレイヤーに通知したり、再びプレイするよう促したりするために使用できます。
// プレイヤーに送信する通知をスケジュールします。
Wortal.Notifications.Schedule(payload,
    result => Debug.Log(result),
    error => Debug.Log("Error Code: " + error.Code + "\nError: " + error.Message));
// スケジュールされた通知をキャンセルする。
Wortal.Notifications.Cancel("notification-id-123",
    () => Debug.Log("Notification cancelled"),
    error => Debug.Log("Error Code: " + error.Code + "\nError: " + error.Message));
通知ペイロードテンプレート
Notifications API で使用するペイロードの作成と管理を簡単にするため、Wortal メニューからテンプレートを作成できます。これらのテンプレートはScriptableObjectsで、コードを書くことなくUnity Editorで簡単に設計・変更することができます。テンプレートの詳細と制限については、このディスカッションを参照してください。
プレイヤー
現在のプレーヤーに関する詳細は、Player APIにて確認できます。
// プレイヤーの友達で、ゲームをプレイしたことがある人のリストを取得する。
Wortal.Player.GetConnectedPlayers(payload,
    players => Debug.Log(players[0].GetName()),
    error => Debug.Log("Error Code: " + error.Code + "\nError: " + error.Message));
// プレイヤーのデータをプラットフォームに保存する
Dictionary<string, object> data = new()
{
    { "items", new Dictionary<string, int>
        {
            { "coins", 100 },
            { "boosters", 2 },
        }
    },
    { "lives", 3 },
};
Wortal.Player.SetData(data,
    () => Debug.Log("Data set"),
    error => Debug.Log("Error Code: " + error.Code + "\nError: " + error.Message));
// プラットフォームからプレイヤーのセーブデータを取得する
Wortal.Player.GetData(new[] { "items", "lives" },
    data =>
    {
        // キャスティングや操作をする前に、戻り値の型を確認すること。
        foreach (KeyValuePair<string, object> kvp in data)
        {
            Debug.Log("Key name: " + kvp.Key);
            Debug.Log("Value type: " + kvp.Value.GetType());
        }
        // 入れ子状のオブジェクトは、次のようにデシリアライズされます。IDictionary<string, object>
        var items = (Dictionary<string, object>)data["items"];
        Debug.Log("Coins: " + items["coins"]);
    },
    error => Debug.Log("Error Code: " + error.Code + "\nError: " + error.Message));
セッション
現在のセッションの状態に関する詳細は、Session API でアクセスできます。
// ゲームが開始されたエントリポイントを取得する。
Wortal.Session.GetEntryPoint(
    entryPoint => Debug.Log(entryPoint),
    error => Debug.Log("Error Code: " + error.Code + "\nError: " + error.Message));
//招待やシェアからエントリーポイントのデータを取得します。
// こちらは、プレイヤーがどこから来たのかを追跡するのに役立ちます。
// 招待されたプレイヤーへ報酬を与えます。
var entryPointData = Wortal.Session.GetEntryPointData();
foreach (KeyValuePair<string, object> kvp in data)
{
    // Do stuff with the data.
}
スタッツ
Stats API は、ゲーム内でのプレイヤーの統計情報を追跡するために使用されます。プレイヤーの進捗状況の追跡や、ゲームのバランス調整に活用できます。
// プレイヤーの統計情報を取得します。
Wortal.Stats.GetStats(
    "Level 1",
    new GetStatsPayload { Period = StatPeriod.ALLTIME },
    stats =>
    {
        foreach (Stats stat in stats)
        {
            Debug.Log(stat.Name);
        }
    },
    error => Debug.Log("Error Code: " + error.Code + "\nError: " + error.Message));
// プレイヤーの統計情報を更新します。
Wortal.Stats.PostStats(
    "Level 1",
    100,
    new PostStatsPayload { Period = StatPeriod.DAILY },
    allback => Debug.Log("Stats posted!"),
    error => Debug.Log("Error Code: " + error.Code + "\nError: " + error.Message));
};
トーナメント
Tournament API は、あなたのゲームのトーナメントを作成し、管理するために使用されます。
// Create a tournament.
Wortal.Tournament.Create(createPayload,
    tournament => Debug.Log("Tournament ID: " + tournament.ID),
    error => Debug.Log("Error Code: " + error.Code + "\nError: " + error.Message));
// Post a score to a tournament.
Wortal.Tournament.PostScore(200,
    () => Debug.Log("Score posted!"),
    error => Debug.Log("Error Code: " + error.Code + "\nError: " + error.Message));