ข้ามไปที่เนื้อหา

ลงทะเบียนฟังก์ชัน callback เพื่อรับเหตุการณ์

ส่วนนี้อธิบายประเภทของเหตุการณ์ที่ได้รับจาก Remote Play, ขั้นตอนการรับเหตุการณ์เหล่านี้, และวิธีการลงทะเบียนฟังก์ชัน callback ใน SDK เพื่อจัดการกับเหตุการณ์เหล่านี้

กระบวนการรับงานอีเวนต์

โดยการลงทะเบียนฟังก์ชัน callback ใน SDK เกมบน PC โฮสต์สามารถรับเหตุการณ์สถานะและเหตุการณ์แชทจาก Remote Play.

การรับสถานะเหตุการณ์

สถานะเหตุการณ์เกิดขึ้นเมื่อ Remote Play เริ่มต้นหรือสิ้นสุด ซึ่งอนุญาตให้เกมบนพีซีโฮสต์สามารถดำเนินการตามพฤติกรรมที่แตกต่างกันได้ ตัวอย่างเช่น หากมีฟีเจอร์ที่ไม่สามารถใช้ได้ในระหว่าง Remote Play เช่น 'การชำระเงิน' หรือ 'ออกจากระบบ' คุณสามารถแสดงป๊อปอัพแจ้งเตือนผู้ใช้ว่าฟีเจอร์เหล่านี้ไม่สามารถใช้งานได้เมื่อได้รับเหตุการณ์เริ่มต้น Remote Play

ตัวอย่างการจัดการเหตุการณ์สถานะ Remote Play ในเกม PC โฮสต์รวมถึง:

  • ซ่อนตัวชี้เมาส์เมื่อเริ่ม Remote Play และแสดงอีกครั้งเมื่อ Remote Play สิ้นสุด
  • แสดงป๊อปอัพเพื่อแจ้งผู้ใช้ว่าร้านค้าเงินสดไม่สามารถใช้งานได้เมื่อเริ่ม Remote Play.

การรับเหตุการณ์แชท

เมื่อผู้ใช้ป้อนข้อความแชทในเซสชัน Remote Play เกมบนพีซีโฮสต์จะได้รับสตริงแชทและส่งไปยังหน้าต่างแชทในเกม ซึ่งเปิดใช้งานฟีเจอร์แชท Remote Play.
กระบวนการในการนำฟีเจอร์แชท Remote Play ไปใช้โดยการรับเหตุการณ์แชทมีดังนี้:

1) เมื่อผู้ใช้ป้อนสตริงในกล่องข้อความบนอินเทอร์เฟซเว็บ Remote Play และกดปุ่ม Enter สตริงจะถูกส่งไปยังเกมบน PC โฮสต์ตามที่แสดงด้านล่าง * ความยาวสูงสุดของการป้อนข้อมูลสำหรับการเล่นระยะไกลคือ 150 ตัวอักษร และทิศทางการอ่านคือ LTR (จากซ้ายไปขวา) และ RTL (จากขวาไปซ้าย)

2) ในเกม PC โฮสต์ สตริงจะถูกส่งผ่านฟังก์ชัน callback ที่ลงทะเบียนล่วงหน้า

3) ในเกม PC โฮสต์ สตริงที่เกี่ยวข้องจะถูกส่งไปยังหน้าต่างแชทของเกม

ลงทะเบียนฟังก์ชัน Callback

ในการรับเหตุการณ์จาก Remote Play คุณต้องนำเข้า Remote Play plugin ลงใน SDK และลงทะเบียนฟังก์ชัน callback

เมื่อฟังก์ชัน callback ถูกลงทะเบียนแล้ว เกมบนพีซีโฮสต์พร้อมที่จะรับเหตุการณ์ระหว่างการเล่นระยะไกล เกมสามารถวิเคราะห์เหตุการณ์ที่ได้รับแต่ละรายการและนำไปใช้ตามสภาพแวดล้อมของตน

ด้านล่างนี้คือตัวอย่างของการลงทะเบียนฟังก์ชัน callback ใน SDK ลงทะเบียนฟังก์ชัน callback ของคุณโดยใช้ 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 นี้หลังจากลงชื่อเข้าใช้, EX) Callback การลงชื่อเข้าใช้ภายใน
void RegisterHiveRemoteCallback {
    RegisterCallback(SendRemotePlayKeyCallback);
}

โปรโตคอลเหตุการณ์

ส่วนนี้อธิบายโปรโตคอลสำหรับเหตุการณ์สถานะและเหตุการณ์แชทที่ได้รับผ่านฟังก์ชัน callback ในเกม

โปรโตคอล JSON

คีย์ ประเภทค่า คำอธิบาย อื่นๆ
version version หมายเลข ข้อมูลเวอร์ชัน Json ดูตัวอย่าง
eventType eventType string ประเภทเหตุการณ์ - รวมถึงค่าที่เป็น "Event" และ "Message" ดูตัวอย่าง
eventValue eventValue วัตถุ วัตถุค่าของเหตุการณ์ ดูตัวอย่าง
eventValue - value eventValue - value string ค่าของเหตุการณ์ ดูตัวอย่าง
eventValue - action eventValue - action string การกระทำของเหตุการณ์ ดูตัวอย่าง
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 (아랍어)