UE4 サンプル用アプリケーション
このセクションでは、UE4 の Cube サンプルのアプリケーションと Genvid のプラグイン、そしてモジュールの使用方法について説明します。
Cube サンプルの実行については、ローカル環境の使用方法 を参照してください。
注釈
このサンプルを実行する際は、必ず 4.15 から 5.1 の間のバージョンを使用してください。アンリアル・エンジンの各バージョンの最新リビジョンを使用することをお勧めします。
重要
ローカル環境でアンリアル・エンジン5を使用している場合、サンプルを実行するために実行ファイルの場所を更新する必要があります。UE5 のビルドでは、Windows プラットフォーム向けにビルドする場合、UE4 とは異なるパス名が使用されます。
ディレクトリ
\samples\cube\ue4\templates\local\
を検索して、編集のためにue4.nomad.tmpl
を開きます。config
で、command
のディレクトリを、 WindowsNoEditor ではなく、 Windows を使用するように変更します。
はじめに
キューブサンプルでは、Unreal Engine 4 Basic Code テンプレート (新規プロジェクト) が使用されています。キューブサンプルはDirectXのサンプルコードを調整したものです。Genvid 統合のすべてを紹介するため、利用可能な全機能を追加しています。
内容
Cube サンプルでは、Athos、Porthos、Aramis という 3 つのキューブが表示されます。それぞれのキューブは、さまざまな方向に回転や移動を行います。キューブがワールドの端まで移動すると、音が鳴り、キューブは反対側に移動して、移動を継続します。
C++ Classes
Cube.cpp
: このファイルが、ゲームモジュールを実行します。Cube.h
: ゲームモジュールのヘッダーファイル。ActorCube.cpp
: キューブの行列変換機能を含むアクター class。ActorCube.h
: Blueprint で呼び出し可能な関数を宣言するヘッダーファイル。Game.cpp
: プレイヤーのビュー射影行列を含むUObject
から派生した class。Game.h
: Blueprint で呼び出し可能な関数を宣言するヘッダーファイル。
Blueprint ゲーム class
BP_Cube
: キューブの表示、管理に使用する class。BP_Pawn
: デフォルトのポーンとして使用される class。BP_GameInstance
: Genvid セッションマネージャのインスタンス化に使用される class。BP_GameMode
: ゲーム classes の設定に使用される class。BP_GameState
: クライアントからのイベントとコマンドの受信に使用される class。BP_PlayerController
: サーバーへのイベントとコマンドの送信に使用される class。
Blueprint Genvid Class
BP_GenvidSessionManager
: Genvid セッションの管理に使用される class。BP_GenvidSession
: Genvid セッションのセットアップに使用される class。BP_GenvidAudio
: Genvid オーディオのパラメータを設定するために使用される class。BP_GenvidVideo
: Genvid ビデオパラメータの設定に使用される class。BP_GenvidStreams
: Genvid イベントのセットアップに使用される class。BP_GenvidEvents
: Genvid イベントのセットアップに使用される class。BP_GenvidCommands
: Genvid コマンドのセットアップに使用される class。
Blueprint の構造体
BP_CubeData
: キューブデータの格納に使用する構造体。BP_GameData
: すべてのキューブおよびビュー射影行列を格納する構造体。BP_NameToColor
: 色と名前を格納する構造体。BP_ColorChanged
: 構成はアノテーションの色と名前を文字列で格納する構造体。BP_Popularity
: キューブ名の popularity を格納する構造体。BP_PopularityData
: 全キューブの popularity を格納する構造体。
アセット
MainMap : ゲームレベル map。
Colored_Steel : キューブに使用される素材。
galvanized_steel : キューブの素材に使用されるテクスチャ。
EdSplash.bmp : Unreal Editor に使用されるスプラッシュ画面。
Splash.bmp : Cube サンプルに使用されるスプラッシュ画面。
Cube サンプルの実行方法
このガイドでは、お使いのシステムが既に Genvid DirectX サンプルを実行するように適切に設定されており、Genvid サービスを実行できることを前提にしています。サービスの実行に関する情報は、 ローカルクラスタの開始 を参照してください。
お使いの Unreal Engine 4 バージョンのエンジンのディレクトリを指定する
UE4ENGINEDIR
という環境変数を宣言してください。デフォルトではUE4ROOT/Engine
のはずです。UE4ROOT
は、Unreal Engine 4 のインストールディレクトリです。注釈
使用するエンジンバージョンを指定できるようになりました。
Epic Games Launcher
を使用する場合、python スクリプトが Unreal Engine のインストールされたすべてのバージョンのパスを自動的に取得します。プロジェクトをビルドする場合 (手順 3)、オプション
-v
または--version
とエンジンのバージョン番号をビルドコマンドの末部につけます。例えば、Unreal Engine Version 4.19 でビルドするには:
py ue4.py build -v 4.19
ゲームランチャーを使用していない場合、環境編集を手動で設定することができます。手動で設定するには、以下の場所に以下の形式で変数名を宣言します: UE4ENGINEDIR_{1}_{2}
{1} がメジャーバージョン、
{2} がマイナーバージョンです。
変数 -e を使用して、手動で割り当てた環境変数を使用していることを指示します。
py ue4.py -e build -v 4.19
キューブのビルドフォルダを準備する。
py ue4.py prepare
- Genvid プラグインと Genvid モジュールが
cube/app
フォルダにコピーする。
プロジェクトのビルド
py ue4.py build
プロジェクトの Visual Studio ソリューションが生成され、すぐにビルドが開始されます。
注釈
パッケージのビルド中に問題が発生した場合:
プロジェクトファイルが Unreal Engine に関連付けられていることを確認します。Unreal Engine ディレクトリ
Engine\Binaries\Win64
の UnrealVersionSelector を使用します。エンジンのバージョンを更新した場合は、
samples\キューブ\ue4\app
内のキューブサンプルIntermediate
ディレクトリを削除してください。
プロジェクト設定を消去して読み込みます。
genvid-sdk setup # Make sure the local cluster is created. genvid-sdk clean-config # Clean old config in case of existing cluster. genvid-sdk load-config-sdk # Configure the basic services for the SDK. py ue4.py load # Configure the cube jobs and settings.
/samples/cube/web
ディレクトリに移動します。Web サイトを構築します。
py web.py build
Web サイトを読み込みます。
py web.py load
プロジェクトを開始します。
genvid-sdk start
Genvid 統合
Genvid Blueprint Class の作成
Unreal Editor を直接経由して、アプリケーション内|で Genvid MILE SDK を統合することが可能な 7 つの class があります。
実装するにあたり、 class ごとに Blueprint を作成する必要があります。
作成が終わったら、次の Content Browser があるはずです。
Blueprint の設定
必要な Blueprint をすべて作成したら、設定してください。
BP_GenvidSessionManager
BP_GenvidSessionManager
class は、データのみの Blueprint です。 Genvid セッションを選択するのに使用します。
Details タブ:
GenvidVideo
の使用する Session Class 向けに作成した Blueprint を選択します。適用するゲームのフレームレートを設定します。
Activate SDK オプションを選択します。
注釈
Genvid Module は将来的に複数のセッションをハンドルするように設計されています。今のところは、現行の Genvid MILE SDK の設計に準拠して、GenvidSessionManager インスタンスが含めることができるのは単一の GenvidSession のみです。
** BP_GenvidSession **
BP_GenvidSession
class は、データのみの Blueprint です。利用するには、ビデオ、オーディオ、ストリーム、イベント、およびコマンドを選択します。
Details タブで、各 class 用に作成した Blueprint を選択します (たとえば、Video Stream Class 向けに GenvidVideo
から作成した Blueprint を選択します)。
BP_GenvidVideo
BP_GenvidVideo
class は、データのみの Blueprint です。使用して、ビデオストリームのパラメータを設定します。
Stream Name : ビデオストリームに対するユニーク名。
Framerate: 期待される video-data のフレームレートを Genvid に伝えます。
Video Mode: ビデオキャプチャモード (
Automatic
またはTexture
)。Video Source : ビデオのデータ ソース (選択したビデオ モードで必要な場合のみ)。
** BP_GenvidAudio **
BP_GenvidAudio
class は、データのみの Blueprint です。使用して、オーディオストリームのパラメータを設定します。
Stream Name : オーディオストリームのユニーク名。
Audio Format : オーディオデータ形式。(
GenvidAudioFormat_S16LE
またはGenvidAudioFormat_F32LE
)Audio Mode : サウンド キャプチャ モード。
BP_GenvidStreams
The BP_GenvidStreams
class には、すべてのストリームを作成および管理するにあたって必要なコードがすべて含まれています。
GenvidStream
構造体を使用してストリームを作成します。 All Possible Actions のコンテキストメニューに Make GenvidStream と入力して、 Event Graph に追加します。
ノードを追加すると、ストリームのパラメータを設定できるようになります。
Name : ユニークなデータストリーム名。
Framerate : ストリームを送信するレート。
Stream (Tick) : イベントは、フレームごとに呼び出されます (
Framerate
で設定)。Stream (Begin Play) : イベントは、ストリームが作成されたときに一度呼び出されます。
Stream (Match Started) : イベントは、ゲームの開始時に一度呼び出されます。
Stream (Match Ended) : イベントは、ゲームの終了時に一度呼び出されます。
Stream (End Play) : イベントは、ストリームが破棄される前に一度呼び出されます。
注釈
Framerate
プロパティはイベント ストリーム (チェックマーク) でのみ使用できます。
フレームごとにイベントを呼び出すには、Framerate
プロパティに 0 を設定します。
それぞれの選択するストリームイベントで、
カスタムイベントを追加します ( All Possible Actions コンテキストメニューに
Custom Event
を入力して Event Graph に追加してください)。カスタムイベントから呼び出したい関数にノードを追加。
注意
ストリームイベントはオプションです。ストリームイベントを選択して、カスタムイベントをリンクしないと、Blueprint はコンパイルされません。カスタムイベントにリンクするか選択を解除するかします。
ストリームイベントを作成した後に、Set Streams 変数に追加します。
このサンプルでは、 の BP_GenvidStreams
ブループリントを使用してキューブ名、キューブの色、キューブの位置、カメラ情報、ゲームの著作権のデータストリームを作成しています。
各ストリームは、ID、送信頻度、デリゲートで定義されます。
オーガナイズと柔軟性を効率よく実現するために、データタイプごとにデータストリームを作成することをお勧めします。
BP_GenvidEvents
BP_GenvidEvents
クラスには、すべてのイベントの作成と管理に必要なコードが含まれています。
GenvidEvent
構造体を使用して、イベントサブスクリプションを作成します。All Possible Actions コンテキストメニューに Make GenvidEvent と入力して、Event Graph に追加します。
ノードを追加すると、イベントのパラメータを設定できるようになります。
Name: イベントの一意な名前を指定します。
Replicated: クライアントまたはサーバー (信頼できるクライアント/サーバーネットワークモデル) にデリゲートを呼び出します。
Delegate : Genvid MILE SDK がイベントを受信すると発生するイベント。
Delegate パラメータから
カスタムイベントを追加します ( All Possible Actions コンテキストメニューに
Custom Event
を入力して Event Graph に追加してください)。定義済みのパラメータを持つノードを追加するには、
Add Custom Event...
を選択します。
ここで Genvid Events
変数に新規イベントを追加します。
All Possible Actions コンテキストメニューに GenvidEvents Set Events と入力します。
Set Events
を選択する。
次の画像は、完全に定義されたイベント Blueprint の表示例です。ご利用になる Blueprintは、アプリケーションのイベントをアレンジしたり管理する方法によって異なります。
BP_GenvidCommands
BP_GenvidCommands
class には、コマンドを作成したり管理するために必要なコードが含まれています。
新規コマンドのサブスクリプションを作成するには、構造体 GenvidCommand
を使用します。All Possible Actions コンテキストメニューに Make GenvidCommand と入力して、Event Graph に追加します。
ノードを追加すると、コマンドのパラメータを設定できるようになります。
Name : コマンドのユニーク名。
Replicated : クライアントまたはサーバー (信頼できるクライアント/サーバーネットワークモデル) にデリゲートを呼び出します。
Delegate : Genvid MILE SDK がコマンドを受信すると発生するコマンド。
Delegate パラメータから
カスタムイベントを追加します ( All Possible Actions コンテキストメニューに
Custom Event
を入力して Event Graph に追加してください)。定義済みのパラメータを持つノードを追加するには、
Add Custom Event...
を選択します。
ここで GenvidCommands の Genvid Commands
変数に新規イベントを追加します。
次の画像は、完全に定義されたコマンド Blueprint の表示例です。お使いの Blueprintは、アプリケーションのコマンドをアレンジしたり管理する方法によって異なります。
UE4 Cube Sample Blueprints
Blueprint の BP_Cube
class には、必要なすべてのゲーム コードが含まれています。
Blueprint の BP_GameInstance
class には、 Genvid SessionManager の初期化および終了に必要なすべてのコードが含まれています。
ゲームイベントとゲームコマンドに関連するすべてのコードも含まれています。
- イベント:
ChangeColor
Cheer
Reset
- コマンド:
Direction
Speed
Reset
Blueprint の BP_GameMode
class には、AGameState
用の class と APlayerState
に基づく class を使用するためのすべての設定が含まれています。
Blueprint の BP_GameState
class には、Genvid イベントとコマンドの受信に必要なすべてのコードが含まれています。
Blueprint の BP_PlayerController
class には、次の3 つのコンポーネントが含まれています。
BP_GenvidStreams
BP_GenvidEvents
BP_GenvidCommands
Genvid MILE SDK クライアント/サーバーアーキテクチャの準拠に応じて必要となります。 詳細は Unreal Engine 4 Genvid クライアント/サーバー を参照してください。
注釈
ゲームデータをサーバーに送信する際、すべてのデータ構造は自動的にすべて JSON にシリアライズされます。
インスタンス化
Genvid セッション は、オーディオ/ビデオキャプチャの初期化と最終化を自動的に管理します。
すべてのストリーム、イベント、コマンドは、PlayerController で管理されます。
GenvidSessionManager をインスタンス化する場所として、UGameInstance
に基づく class 内を推奨します。アプリケーションの起動時に Initialize() 関数を、停止時に Terminate() を呼び出します。