イベント受信用コールバック関数の登録
このセクションでは、リモートプレイから受信するイベントの種類、受信プロセス、およびこれらのイベントを処理するためにSDKでコールバック関数を登録する方法について説明します。
イベント受信プロセス¶
SDKにコールバック関数を登録することで、ホストPCゲームはリモートプレイからのステータスイベントとチャットイベントを受信できます。
ステータスイベントの受信¶
ステータスイベントは、リモートプレイが開始または終了すると発生し、ホストPCゲームがそれに応じて異なる動作を実装できるようにします。たとえば、リモートプレイ中に使用できない機能(「支払い」や「ログアウト」など)がある場合、リモートプレイ開始イベントを受信したときに、これらの機能が利用できないことを通知するポップアップを表示できます。
ホストPCゲームにおけるリモートプレイステータスイベントの処理の例には次のものが含まれます:
- リモートプレイが開始されるとマウスカーソルを隠し、リモートプレイが終了すると再び表示します。
- リモートプレイが開始されると、キャッシュショップが利用できないことをユーザーに通知するポップアップを表示します。
チャットイベントの受信¶
ユーザーがリモートプレイセッションでチャットメッセージを入力すると、ホストPCゲームはチャット文字列を受信し、それをゲーム内チャットウィンドウに送信してリモートプレイチャット機能を有効にします。
 チャットイベントを受信してリモートプレイチャット機能を実装するプロセスは次のとおりです:
1) ユーザーがリモートプレイのウェブインターフェースのテキストボックスに文字列を入力し、Enterキーを押すと、文字列は以下のようにホストPCのゲームに送信されます。  * リモートプレイの最大入力長は150文字で、読み方向はLTR(左から右)およびRTL(右から左)です。
 * リモートプレイの最大入力長は150文字で、読み方向はLTR(左から右)およびRTL(右から左)です。
2) ホストPCゲームでは、文字列は事前に登録されたコールバック関数を通じて受信されます。
3) ホストPCゲームでは、対応する文字列がゲームチャットウィンドウに渡されます。
コールバック関数の登録¶
リモートプレイからイベントを受信するには、SDKにリモートプレイプラグインをインポートし、コールバック関数を登録する必要があります。
コールバック関数が登録されると、ホストPCゲームはリモートプレイ中にイベントを受信する準備が整います。ゲームは受信した各イベントを分析し、それに応じて環境に適用することができます。
以下は、SDKでコールバック関数を登録する方法の例です。HiveRemotePlayManager.RegisterCallbackを使用してコールバック関数を登録します。
using AOT; // Required for MonoPInvokeCallback
public class {YourCustomClass} : MonoBehaviour { // YourCustomClass: Class used in your user game
#if !UNITY_EDITOR && UNITY_STANDALONE_WIN
    [MonoPInvokeCallback (typeof(HiveRemotePlayManager.RemotePlayCallbackType))]
    public static void RegisterRemoteCallbackFunction(int type, string remotePlayJsonData)
    {
        Debug.Log("REMOTE Callback DATA :" + remotePlayJsonData); // Receiving json data sent from RemoteSDK.
    }
#endif
    void Start() {
#if !UNITY_EDITOR && UNITY_STANDALONE_WIN
        HiveRemotePlayManager.RegisterCallback(RegisterRemoteCallbackFunction);
#endif
    }
}
次の内容を[Your_Project_Root]/Source/[Your_Project_Name]/[Your_Project_Name].build.csに追加してください。 [Your_Project_Name]をプロジェクトの実際の名前に置き換えてください。
public class <Your_Project_Name> : ModuleRules
{
    public <Your_Project_Name>(ReadOnlyTargetRules Target) : base(Target)
    {
        ...
        PublicDependencyModuleNames.AddRange(new string[] { "HiveRemotePlay" });
        ...
    }
}
プロジェクト実装中に使用されるコードの例は以下の通りです。
#include "RemotePluginInterface.h"  // Required in the project's build.cs: PublicDependencyModuleNames.AddRange(new string[] { "HiveRemotePlay" });
// 例 API 1. 一時的な API 名
void SendRemotePlayKeyCallback(int _type, const char* _pData) {
    UE_LOG(LogTemp, VeryVerbose, TEXT("==================SendRemotePlayKeyCallback================\n"));
    char typeBuffer[35];
    char* typeStr;
    typeStr = _itoa(_type, typeBuffer, 10);
    UE_LOG(LogTemp, VeryVerbose, TEXT("type : %s \n"), *FString(typeStr));
    UE_LOG(LogTemp, VeryVerbose, TEXT("type : %s \n"), *FString(_pData)); // 例: {"version":"1.0.250300","eventType":"Message","eventValue":{"value":"MTFIZWxsbyBrZXkgaW5wdXQgMQ==","action":"LTR"},"etc":{}} 
}
// 例のAPI 2. サインイン後にこのAPIを呼び出します。例) 内部サインインコールバック
void RegisterHiveRemoteCallback {
    RegisterCallback(SendRemotePlayKeyCallback);
}
イベントプロトコル¶
このセクションでは、ゲーム内のコールバック関数を通じて受信されるステータスイベントおよびチャットイベントのプロトコルについて説明します。
JSONプロトコル¶
| キー | 値の型 | 説明 | その他 | |
|---|---|---|---|---|
| version | version | 数値 | Json バージョン情報 | 例を参照 | 
| eventType | eventType | 文字列 | イベントタイプ - "Event" と "Message" の値を含む | 例を参照 | 
| eventValue | eventValue | オブジェクト | イベント値オブジェクト | 例を参照 | 
| eventValue - value | eventValue - value | 文字列 | イベント値 | 例を参照 | 
| eventValue - action | eventValue - action | 文字列 | イベントアクション | 例を参照 | 
| etc | etc | オブジェクト | 拡張目的のため | 例を参照 | 
ステータスイベントデータの例¶
以下はステータスイベントデータの例です。
{
    "version"        : "1.0.2411.0",
    "eventType"      : "Event",
    "eventValue"     : {
                            "value"  : "REMOTE_PLAY_CONNECTED"
                         },
    "etc"            : { }
}
// value    : REMOTE_PLAY_CONNECTED, REMOTE_PLAY_DISCONNECTED
チャットイベントデータの例¶
受信したチャット文字列はUTF-8でエンコードされ、その後Base64に変換されます。また、複数の言語をサポートするために読み取り方向情報も含まれています。
以下はチャットイベントデータの例です。
{
    "version"        : "1.0.2411.0",
    "eventType"       : "Message" ,
    "eventValue"     : {
                            "value"  : "Something Message",
                            "action" : "LTR | RTL"
                       },
    "etc"            : { }
}
// value    : Base64  (UTF-8 문장) 인코딩
// action   : LTR (아랍어를 제외한 문자) | RTL (아랍어)