チャット文字列を受信するためのコールバック登録
リモートプレイチャット機能は、ユーザーがリモートプレイ中に文字列を入力すると、それがホストPCのゲームチャットウィンドウに送信されるように実装できます。
1) ユーザーが以下に示すウェブのリモートプレイ専用のテキストボックスに文字列を入力し、エンターキーを押すと、その文字列がホストPCゲームに送信されます。  * リモートプレイの最大入力長は150文字で、読み方向はLTR(左から右)とRTL(右から左)です。
 * リモートプレイの最大入力長は150文字で、読み方向はLTR(左から右)とRTL(右から左)です。
2) ホストPCゲームでは、文字列は事前に登録されたコールバック関数を通じて受信されます。
3) ホストPCゲームでは、対応する文字列がゲームチャットウィンドウに渡されます。
コールバック関数の登録¶
リモートプレイでチャット機能を使用するには、リモートプレイプラグインをインポートした後にコールバック関数を登録する必要があります。
コールバック関数を登録することで、リモートプレイ中にチャット機能が使用できるようになり、ゲームは各ゲーム環境に応じてリモートプレイから受信した文字列をチャット機能に適用できるようになります。
ゲーム内でコールバック関数を通じて受信した文字列はUTF-8でエンコードされ、Base64に変換されます。さらに、これには読み取り方向情報が含まれており、多言語サポートを可能にしています。
以下のようにHiveRemotePlayManager.RegisterCallbackでコールバック関数を登録します。
using AOT; // Required for MonoPInvokeCallback
public class {YourCustomClass} : MonoBehaviour { // YourCustomClass: ユーザーゲームで使用されるクラス
#if !UNITY_EDITOR && UNITY_STANDALONE_WIN
    [MonoPInvokeCallback (typeof(HiveRemotePlayManager.RemotePlayCallbackType))]
    public static void RegisterRemoteCallbackFunction(int type, string remotePlayJsonData)
    {
        Debug.Log("REMOTE Callback DATA :" + remotePlayJsonData); // RemoteSDKから送信されたjsonデータを受信しています。
    }
#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を呼び出します。EX) 内部サインインコールバック
void RegisterHiveRemoteCallback {
    RegisterCallback(SendRemotePlayKeyCallback);
}
チャット文字列プロトコル¶
ゲーム内のコールバック関数を通じて受信したチャット文字列のプロトコルは次のとおりです。
ウェブ - クライアント JSON プロトコル¶
| キー | 値のタイプ | 説明 | ETC | |
|---|---|---|---|---|
| version | version | number | Json バージョン情報 | 例を参照 | 
| eventType | eventType | string | イベントタイプ - メッセージ項目のみ存在 | 例を参照 | 
| eventValue | eventValue | object | イベント値オブジェクト | 例を参照 | 
| eventValue - value | eventValue - value | string | イベント値 | 例を参照 | 
| eventValue - action | eventValue - action | string | イベントアクション | 例を参照 | 
| etc | etc | object | 拡張目的のため | 例を参照 | 
チャット文字列データの例¶
ゲーム内のコールバック関数を通じて受信したチャット文字列は、以下のJSONデータ形式を持っています。
{
    "version"        : "1.0.2411.0",
    "eventType"       : "Message" ,
    "eventValue"     : {
                            "value"  : "Something Message",
                            "action" : "LTR | RTL"
                       },
    "etc"            : { }
}
// value    : Base64  (UTF-8 문장) 인코딩
// action   : LTR (아랍어를 제외한 문자) | RTL (아랍어)