Unreal Engine 4でのDiarkis Cloudの接続方法

Unreal Engine 4(UE4)ではプラグインを使って簡単にDiarkis Cloudへ接続することができます。 このエントリではDiarkisクラスタへの接続方法と終了方法を解説します。

ue4_tutorial_01_ss_00_960x540

サンプルプログラムの実行方法

こちらよりサンプルプログラムをダウンロードし実行してください。

画面左上に表示されるUIにDiarkis Cloudとの接続情報を入力し、”Connect”のボタンを押してください(これらの情報が何を意味するかは下記の記事を参考にしてください)。

Host:EndPoint URLをセット
ClientKey:Client Keyをセット
UID:任意のユーザーIDをセット
UseUDP:チェックをつけるとUDPで接続。チェックを外すとTCPで接続。

アカウントの取得とクラスタの作成

こちらのエントリに従ってDiarkis Cloudのアカウントを作成し、その後クラスタを一つ作成してください。
そして作成されたクラスタのEndpoint URLClient Keyをメモしてください。

// 以下の二つの情報をメモ(実際の値は適宜置き換えてください)
Endpoint URL:asia-northeast1.diarkis.io/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
Client Key:XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX

UE4へのプラグインの導入

こちらよりプラグインをダウンロード&解凍し、”/[Project Root]/Plugins/”以下に配置してください(”Plugins”ディレクトリが無ければ作成してください)。

[Project Root]
├── Config
├── Content
├── Plugins(無ければ作成)
│   └── Diarkis
└── Source

次に”/[Project Root]/Source/[Project Name]/[Project Name].Build.cs”を開き、以下のようにDiarkisモジュールを依存関係に追加してください。

  PublicDependencyModuleNames.AddRange( new string[] {
"Core",
"CoreUObject",
"Engine",
"InputCore",
"HeadMountedDisplay",
...
...
+ "Diarkis" // モジュールを追加
} );

ヘッダのインクルード方法

現在のDiarkis Cloud SDKでは一部のマクロがUE4のものと重複しており(修正予定)、そのままビルドしようとするとエラーが出ます。
それを避けるため、以下のようにインクルードしてください。

#include "Windows/AllowWindowsPlatformTypes.h"
#include "DiarkisInterfaceBase.h"
#include "Windows/HideWindowsPlatformTypes.h"

Diarkisクラスタへの接続方法

上記の通りヘッダをインクルードした後、”DiarkisInterfaceBase”インスタンスを作成してください。
この時、クラスタを作成した際にメモしたEndpoint URLClient Key、それから任意のユーザーIDをコンストラクタとして渡してください。

インスタンスの作成が完了したら、UDP(or TCP)で接続してください。

bool AMyClass::Connect(const FString& Host, const FString& ClientKey, int64 UID, bool bUseUdp)
{
string host = std::string(TCHAR_TO_UTF8(*Host));
string clientKey = std::string(TCHAR_TO_UTF8(*ClientKey));

// bool AMyClass::_bUseUdp;
this->_bUseUdp = bUseUdp;

// TSharedPtr<DiarkisInterfaceBase> AMyClass::diarkis;
this->diarkis = MakeShared<DiarkisInterfaceBase>(host, clientKey, (uint64_t) UID, LogOutType::FILE_OUT);
this->diarkis->WaitUntilReady();

if (this->_bUseUdp)
{
if (!this->diarkis->ConnectUdp())
{
UE_LOG(LogTemp, Error, TEXT("ConnectUdp() Failed."));

this->diarkis->Stop();
this->diarkis->Disconnect();
this->diarkis = nullptr;

return false;
}
}
else
{
if (!this->diarkis->ConnectTcp())
{
UE_LOG(LogTemp, Error, TEXT("ConnectTcp() Failed."));

this->diarkis->Stop();
this->diarkis->Disconnect();
this->diarkis = nullptr;

return false;
}
}

return true;
}

接続の終了方法

プログラムを終了するときは、以下のようにしてインスタンスを破棄してください。

void AMyClass::Disconnect()
{
// TSharedPtr<DiarkisInterfaceBase> AMyClass::diarkis;
if (this->diarkis.IsValid())
{
this->diarkis->Stop();
this->diarkis->Disconnect();
this->diarkis = nullptr;
}
}