跳转至

注册回调以接收聊天字符串

远程游戏聊天功能可以以这样的方式实现:当用户在远程游戏中输入字符串时,它会被发送到主机PC的游戏聊天窗口。

1) 当用户在下面所示的网页远程播放文本框中输入字符串并按下回车键时,该字符串将发送到主机PC游戏。 * 远程播放的最大输入长度为150个字符,阅读方向为LTR(从左到右)和RTL(从右到左)。

在主机PC游戏中,字符串通过预注册的回调函数接收。

在主机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,例如:内部登录回调
void RegisterHiveRemoteCallback {
    RegisterCallback(SendRemotePlayKeyCallback);
}

聊天字符串协议

通过游戏中的回调函数接收到的聊天字符串的协议如下。

网络 - 客户端 JSON 协议

值类型 描述 其他
version 版本 数字 Json 版本信息 参见示例
eventType 事件类型 字符串 事件类型 - 仅存在消息项 参见示例
eventValue 事件值 对象 事件值对象 参见示例
eventValue - value 事件值 - 值 字符串 事件值 参见示例
eventValue - action 事件值 - 动作 字符串 事件动作 参见示例
etc 其他 对象 用于扩展目的 参见示例

聊天字符串数据示例

通过游戏中的回调函数接收到的聊天字符串具有以下JSON数据格式。

{
    "version"        : "1.0.2411.0",
    "eventType"       : "Message" ,
    "eventValue"     : {
                            "value"  : "Something Message",
                            "action" : "LTR | RTL"
                       },
    "etc"            : { }
}
// value    : Base64  (UTF-8 문장) 인코딩
// action   : LTR (아랍어를 제외한 문자) | RTL (아랍어)