PubNubでアンリアル・エンジン5.3にリアルタイム機能を追加する

PubNub Developer Relations - Mar 8 - - Dev Community

アンリアル・エンジン (UE) 5.3 のマルチプレイヤーゲームやオンラインゲームにリアルタイム機能を追加するのであれば、PubNub が最適です。PubNub は、低レイテンシーのメッセージングとスケーラビリティを保証し、ゲーム内のチャット、オンライン ステータスの検出、フレンド リスト、スコア システム、リーダー ボードなどのソーシャル機能でプレイヤー エクスペリエンスを向上させます。Windows、Mac、iOS、Android、OculusやMeta Questのようなバーチャルリアリティシステム、またはクロスプラットフォーム向けに開発されているかにかかわらず、当社は、お客様がアプリケーションに集中できるよう、リアルタイムのインタラクティブ性を実現するゲームのインフラストラクチャーレイヤーを引き受けます。

PubNubのアンリアル・エンジン・モジュールを使用して、UEゲームにこれらのリアルタイム機能などを実装する方法については、こちらをご覧ください。

私たちのUnreal Engine Pluginはまだ開発の初期段階であることにご留意ください。devrel@pubnub.com、または私たちのGitHubリポジトリにプルリクエスト/issueを送信してフィードバックをお寄せください。

前提条件

始める前に、いくつかのものを準備する必要があります:

  1. アンリアル エンジン:Unreal Engine がインストールされていることを確認してください。この投稿は UE 5.3 を使用して作成されています。

  2. IDE: UE では Visual Studios を使用することをお勧めします。UE 5.3 と Visual Studios のセットアップについては、Epic Games の指示に従ってください。

  3. PubNub:無料のPubNub アカウントにサインアップして、ネットワークに接続するために必要な API キーを取得します。アプリとキーセットを作成する必要がありますが、その方法はこちらのガイドを参照してください。また、オンライン検出のためにPresenceを有効にする必要があり、その方法はハウツーガイドをご覧ください。

PubNub Unrealモジュールを統合する

PubNub Unreal Engineモジュールを使用してオンライン機能を利用できるようにするには、SDKのセットアップを行い、プロジェクトに追加して機能を統合できるようにする必要があります。

SDKのセットアップ

まず、SDKリポジトリをUnreal Engineプロジェクトのソースにクローンします:

git clone [Repository_URL] [Your_Unreal_Project]/Source/ThirdParty/
Enter fullscreen mode Exit fullscreen mode

Repository_URL]をPubNub C-Core SDKリポジトリの実際のURLに置き換えてください。ThirdPartyフォルダが存在しない場合は作成します。

Windowsの場合は、Visual Studiosでプロジェクトを開きます。nmake コマンドを実行するには、ツール > コマンドライン > 開発者コマンドプロンプトにアクセスする必要があります。

SDKディレクトリに移動し、システムに適したコマンドを使用してコンパイルします(注:このブログはWindows OSを使用して書かれており、Windowsコマンドを使用しています):

POSIX (Linux/Mac)

オプション、アーキテクチャ、実装を適宜置き換えてください。

make -C <option> -f <architecture>.mk pubnub_<implementation>.a
Enter fullscreen mode Exit fullscreen mode

Windows:

nmake -f windows.mk
Enter fullscreen mode Exit fullscreen mode

Windowsユニバーサル・プラットフォーム:

nmake -f windows/uwp.mk
Enter fullscreen mode Exit fullscreen mode

OpenSSL:

make -C openssl -f posix.mk pubnub_sync.a
Enter fullscreen mode Exit fullscreen mode

注意:OpenSSL オプションを使用する場合は、OpenSSL ライブラリ ヘッダが Unreal のものと一致していることを確認してください。

Source/ThirdParty/PubNubModule/PubNubModule.Build.csを開き、OptionArchitecture、およびImplementation オプションをコンパイルに使用したのと同じ値で調整します。例

private readonly string Option = "windows"; // posix, windows, openssl
private readonly string Architecture = "windows"; // posix, windows
private readonly string Implementation = "callback"; // sync, callback
Enter fullscreen mode Exit fullscreen mode

PubNub モジュールをインクルードするようにプロジェクトのターゲット ファイルを修正してモジュールをインポートします。UnrealProject は必ず実際のプロジェクト名に置き換えてください:

public class <UnrealProject>[Editor]Target : TargetRules
{
    public <UnrealProject>[Editor]Target (TargetInfo Target) : base(Target)
    {
        //...
        ExtraModuleNames.Add("PubNubModule");
    }
}
Enter fullscreen mode Exit fullscreen mode

UnrealProject.uproject

{
  //...
  "Modules": [
    //...
    {
      "Name": "PubNubModule",
      "Type": "Runtime",
      "LoadingPhase": "Default"
    }
  ],
  //...
}
Enter fullscreen mode Exit fullscreen mode

これでSDKのセットアップはほぼ完了です。あとはVisual Studios Projectファイルを生成するだけです(または、新しい変更を含めるためにファイルを更新するだけです)。これには、アンリアル エンジン 5.3 エディタを使用する方法や、ファイル エクスプローラで.uprojectファイルを右クリックして Visual Studio プロジェクト ファイルを生成する方法などがあります:

モジュールの使用

PubNub Unreal Engine モジュールの使用を開始するには、PubNub を使用するモジュールのModule.Build.csファイルを変更し、モジュールを追加する必要があります。Moduleは必ずモジュール名に置き換えてください:

public class <Module> : ModuleRules
{
    public <Module>(ReadOnlyTargetRules Target) : base(Target)
    {
        //...
        PrivateDependencyModuleNames.Add("PubNubModule");
    }
}
Enter fullscreen mode Exit fullscreen mode

最後に、あなたのファイルに#include "PubNub.h "を介してPubNubヘッダをインクルードする必要があります。インクルードTHIRD_PARTY_INCLUDES_STARTと THIRD_PARTY_INCLUDES_ENDは すでに処理されているので、ラップする必要はありません。

リアルタイム機能の実装

これで、これらのリアルタイム ユースケースを UE Game に実装する準備が整いました!しかしその前に、PubNubがどのように動作するのか、高いレベルで理解するためにもう少し深く潜ってみましょう。

PubNubの概要

PubNubはPub/Sub(Publish/Subscribe)モデルに基づいています。ユーザは、基本的にすべての関連情報を含むペイロードであるメッセージをPubNubネットワークに公開する。メッセージと他の生成されたイベントを受信またはリスニングしたいユーザーは、PubNubネットワークにサブスクライブし、メッセージを解析します。イベントリスナーは、PubNubネットワークで生成されたメッセージやイベントをキャッチし、行われたアクションに基づいてトリガするために使用されます。

メッセージが適切な受信者に確実に届くようにするために、あるデバイスから別のデバイスにデータが送信されるメカニズムとしてチャネルが使用されます。チャネルは、デバイスがPubNubネットワークにパブリッシュおよびサブスクライブするたびに必要になります。ユーザは一度に1つのメッセージしか発行できませんが、ユーザは一度に多くの異なるチャンネルを購読することができます。

ゲーム内チャット

ゲーム内チャットやアプリ内メッセージは、プレイヤーのエンゲージメントを高め、ユーザーの定着を助けます。ゲーム内チャットは、ゲーマー同士のコミュニケーションを可能にし、コミュニティ意識を育み、より楽しいユーザーエクスペリエンスを実現するソーシャルインタラクションのプラットフォームを提供します。

プレイヤーがメッセージを送信するたびにPubNubのPub/Subアーキテクチャを利用してメッセージをパブリッシュすることで、UE 5ビデオゲームにゲーム内チャットを追加してリアルタイムコミュニケーションを行うことができます。クライアントは、これらのメッセージをリッスンするために適切なチャンネルをサブスクライブし(チャットのタイプは、チャンネル名によって決定されます)、OnMessageReceived イベントリスナーでそれらをキャッチし、適切に処理します:

// Initialize the PubNub client
PubNubClient->Init(YourPublishKey, YourSubscribeKey);

// Sending a message
FString Channel = "all-chat";
FString Message = "Hello, fellow friends!";
PubNubClient->Publish(Channel, Message);

// Receiving messages:
PubNubClient->Subscribe(Channel);
PubNubClient->OnMessageReceived.AddLambda([](const FString& Channel, const FString& Message) {
    // Handle the received message here and display on screen.
    UE_LOG(LogTemp, Warning, TEXT("Received message on %s: %s"), *Channel, *Message);
});
Enter fullscreen mode Exit fullscreen mode

オンライン状態の検出

プレゼンスは、ゲーム内のプレイヤーのオンラインステータスを決定するために使用され、イベントを生成してリアルタイムでステータスの情報を配信します。Presenceはゲームにとって非常に重要な機能で、プレイヤーにフレンドのオンライン状態、オンラインかオフラインか、現在マッチ中かロビー中か、ゲームワールド内の位置、さらにはどのようなアクティビティに参加しているかなどを知らせることができます。

Presence API を使用すると、User State によるカスタムイベントも含め、ユーザーがいつオンラインになったか、なったかを追跡できます。そして、各クライアントをプレゼンスを追跡するチャンネルにサブスクライブし、OnPresenceEventReceived イベントリスナーを介してこれらのイベントをリッスンします:

// Subscribe to a presence channel
FString PresenceChannel = "presence.all";
PubNubClient->Subscribe(PresenceChannel);

// Listen for presence events
PubNubClient->OnPresenceEventReceived.AddLambda([](const FPubNubPresenceEvent& Event) {
    if (Event.Action == EPubNubPresenceAction::Join) {
        UE_LOG(LogTemp, Warning, TEXT("%s joined the game!"), *Event.UUID);
    } else if (Event.Action == EPubNubPresenceAction::Leave) {
        UE_LOG(LogTemp, Warning, TEXT("%s left the game."), *Event.UUID);
    }
    // Handle other presence actions as needed, including custom user state.
});
Enter fullscreen mode Exit fullscreen mode

フレンド/ギルド/アライアンス/プランリスト

Unreal Engine ゲームにフレンド、ギルド、アライアンス、クラン リストを組み込むことは、プレイヤーのエンゲージメントを促進する上で重要な要素です。これにより、プレイヤーは、ゲーム外での友人であるか、または激しい試合中に親密な絆を結んだかに関わらず、ゲーム内で他のプレイヤーとより親密なつながりを作ることができます。

このようなリストは、チャンネルグループの作成と購読を活用することで、ゲーム内に実装することができます。チャンネルグループを利用することで、一度に大量のチャンネルを管理することができます。チャンネル・グループは基本的にチャンネル・リストへのポインターで、チャンネル・グループごとに最大2000チャンネルまで1回のサブスクライブ・コールを送ることができます。チャンネルグループはネットワークに接続しているユーザーIDに一意であり、チャンネルグループに一意な名前を付けてそのプレイヤーに関連付けることができます。

フレンド/ギルド/アライアンス/クランリストを追加するには、Channel Groups APIを使用して各リストに一意な名前を定義し、各リストにチャンネルを追加/削除することで、ゲーム内で関連するプレイヤーがリストに追加/削除されることを表します。これらのグループに対するオンラインステータスの検出とチャットは、ゲーム内チャットとプレゼンスによるオンラインステータスの検出の前のセクションに従います。フレンド/ギルド/アライアンス/クランリストの実装に関する詳細は、アーキテクチャ設定に関するドキュメントを参照してください。

ライブリーダーボードとスコアリングシステム

スコアリングシステムとリーダーボードは、楽しいゲーム体験を提供するための重要な要素です。スコアリングシステムは、プレイヤーが激しい試合を行っている間に重要な情報を提供し、勝利の可能性を判断するために必要です。一方、リーダーボードは、試合後にハイスコアを見るためにプレイヤー間の競争を促す方法として使用されます。どちらもリプレイ性を促進し、プレイヤーを定着させる簡単な方法です。

スコアリングシステムは、ゲーム内のメッセージングと同じように実装することができます。マッチに参加している人だけがアップデートを受け取れるようにチャンネルパターンを設定し、該当するプレイヤーがマッチに参加したらそのチャンネルに登録します。新しいダメージアップデートが発生したときなど、送信するアップデートがあったら、メッセージを作成して送信することでアップデートを公開します。Unreal Engine プロジェクトに実装できるさまざまなタイプのスコアボードについては、スコアボード システム ガイドを参照してください。

試合が終了すると、他のプレイヤーが閲覧できるようにグローバル リーダーボードを更新するための最後の呼び出しが行われます。Functions を使用することで、エッジ上でビジネス ロジックを作成して実行し、PubNub ネットワークを経由するリアルタイムのメッセージをルーティング、フィルタリング、変換、拡張、集約することができます。また、KVストアモジュールは、Functionsのデータベースとして機能する永続的なキーバリューストアです。

リーダーボードでは、プレーヤーが試合を終えた後にスコアを更新し、リーダーボードの更新に特化したチャンネルを購読してプレーヤーにリーダーボードの更新を通知します。Functionsの詳細については、ドキュメントをご覧ください。

次の記事

この投稿では、PubNub を使用してアンリアル エンジン 5.3 ゲームにリアルタイム機能を追加する方法について説明しました。ゲーム内のメッセージング、ライブスコアリングシステムやリーダーボード、あるいはフレンド/ギルド/アライアンス/クランリストの追加など、ゲーム開発者はPubNubを利用してこれらの機能をリアルタイムで利用することができます。

アンリアル・エンジンモジュールを使用してUE 5.3ゲームにリアルタイム機能を追加したい場合は、ドキュメントを 参照して、リアルタイム機能を実装するために必要なものを確認してください。また、他のゲームエンジン用の SDK も用意しています。例えば、Unity ゲームでは、この投稿で説明した機能などを紹介するためにUnity を使用しています。当社の Unreal Engine プラグインはまだ開発初期段階であるため、フィードバックやご質問はdevrel@pubnub.comまでお寄せいただくか、GitHub リポジトリにプルリクエスト/issue を送信してください。

コンテンツ

前提条件PubNub Unrealモジュールの統合SDKのセットアップモジュールの使用リアルタイム機能の実装PubNubの概要ゲーム内チャットオンラインステータス検出フレンド/ギルド/アライアンス/クランリストライブリーダーボードとスコアリングシステム次へ

PubNubはどのようにお役に立ちますか?

この記事はPubNub.comに掲載されたものです。

PubNubのプラットフォームは、開発者がWebアプリ、モバイルアプリ、IoTデバイス向けにリアルタイムのインタラクティブ機能を構築、提供、管理できるように支援します。

私たちのプラットフォームの基盤は、業界最大かつ最もスケーラブルなリアルタイムエッジメッセージングネットワークです。世界15か所以上で8億人の月間アクティブユーザーをサポートし、99.999%の信頼性を誇るため、停電や同時実行数の制限、トラフィックの急増による遅延の問題を心配する必要はありません。

PubNubを体験

ライブツアーをチェックして、5分以内にすべてのPubNub搭載アプリの背後にある本質的な概念を理解する

セットアップ

PubNubアカウントにサインアップすると、PubNubキーに無料ですぐにアクセスできます。

始める

PubNubのドキュメントは、ユースケースやSDKに関係なく、あなたを立ち上げ、実行することができます。

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .