読者です 読者をやめる 読者になる 読者になる

Let's Enjoy Unreal Engine

Unreal Engineを使って遊んでみましょう

UE4 C++コードをブループリントで使えるようにする(関数ライブラリー編)

今回はC++コードを実際に触ることになるため、主にプログラマーの方へ向けた内容になります。が、内容だけなら難しいことは扱いませんので、プログラマーの方以外も気楽にどうぞ。

ただし前提としてWindows環境でVisualStudio2013がインストールされている必要があります。VisualStudioのインストールは以下のリンクからインストールしておいてください。

Download Microsoft Visual Studio Express 2013 for Windows Desktop from Official Microsoft Download Center

ダウンロードリンクが変わったようです。現在は以下のリンクからVisual Studio Express 2013 for Windows Desktopを選んでインストールしてください。

Visual Studio のダウンロード

 実際にブループリントを作る前に

今回は最も単純なブループリントノード形式である、"関数ライブラリー"の作成を行います。今回とは別にアクターをベースとしたクラス編も別途書くつもりですので、そちらもご期待ください。

まずは新規プロジェクトを作成しておきましょう。今回はC++のコードを扱いますので、ブループリントオンリーのテンプレートではなく、最初からC++プロジェクトが自動生成されるものを選択します。

f:id:alwei:20140910191506j:plain

これでVisualStudioのソリューション自体が出来て、VisualStudioが自動で立ち上がっていると思います。この状態でF5キーを入力してプロジェクトを実行しましょう。

いつものUE4エディターの画面が起動しました。

ブループリント用のC++ファイルを追加

UE4エディターのメニューから"ファイル"、"プロジェクトにコードを追加"を選びます。

f:id:alwei:20140910192142j:plain

開いたウィンドウの右上にある、"全てのクラスを表示"のチェックボックスを入れておきます。これで使用できる全てのクラス一覧が表示されますので、検索ボックスに"BlueprintFunctionLibrary"と入力して、"次へ"ボタンを選択します。

f:id:alwei:20140910192419j:plain

その後の画面でファイル名を適当に決めて、そのまま"クラスを作成"ボタンを選択して、ポップアップウィンドウで"コードを修正しますか?"という選択が出てきますが、そのまま"はい"を選んでおきます。

VisualStudio側に戻り、ファイル変更の検出が行なわれているはずなので、"再読み込み"ボタンを選択して、一旦実行を中断するために"デバッグを中止します"の選択で"はい"を選択します。

これで無事C++のファイルをプロジェクトに追加できました。

C++コードを修正する

作成したC++ファイルをVisualStudio上で開きます。最低限のコードだと以下のような具合になります。

.hファイル

UCLASS()
class CPPTEST_API UMyBlueprintFunctionLibrary : public UBlueprintFunctionLibrary
{
	GENERATED_UCLASS_BODY()
};

これらのコードはUE4がツールにより自動生成します。特に問題がなければ触らないようにしておきましょう。一部プロジェクトの名前やファイル名によって自動的につけられている部分がありますので、このままコードをコピペすれば動くというわけではないことにご注意ください。

では実際にブループリントで使用できる関数を追加しましょう。上記のクラス宣言内に以下のようなコードを追加してみます。

UFUNCTION(BlueprintCallable, Category="MyBPLibrary")
static FString HelloWorld();

"UFUNCTION"というマクロに注目します。これはUE4に独自で用意されているメタ情報のマクロであり、C++の記法とは一切関係ありませんが、UE4内で独自の情報を付加することのできる大切な情報です。

一番目の引数ですが、これは主に二種類宣言することができます。

キーワード説明
BlueprintCallable ブループリントから呼び出せるネイティブな関数で、呼び出しているオブジェクト、もしくはグローバルな情報を更新する可能性がある場合に使用します。これを指定した場合、ノードに実行ピンが含まれるようになります。ブループリント上で使用する場合には白い実行ラインと接続されて、必ず順番に実行されるようになります。
BlueprintPure ブループリントから呼び出せるネイティブな関数で、呼び出しているオブジェクト、もしくはグローバルな情報を更新する可能性がない場合に使用します。これを指定した場合、ノードには実行ピンが含まれません。単純に情報を取得するだけのノードとなり、実行ピンのあるノードで使用するたびに新たな情報を取得します

 主な違いは実行用の白いピンが含まれるか、そうでないかの違いです。

次に使用している"Category"というキーワードですが、これはブループリント上で右クリックなどで検索する時に出現する項目カテゴリーのことです。基本的に自由な名前をつけることができますので、必要な名前を指定してあげてください。

ヘッダーの修正は以上です。次は.cppファイルに以下のコードを追加します。

FString UMyBlueprintFunctionLibrary::HelloWorld()
{
	return FString("Hello World!!");
}

単純な文字列を返すだけのstatic関数です。これだけでOKです。あとはF5キーを押してみて、UE4エディターを実行するだけです。

ブループリント上で使用してみる

エディターを実行したらレベルブループリントなりを開いて、作ってみた関数を検索してみます。

f:id:alwei:20140910201659j:plain

これでノードを配置して実行してみましょう!

f:id:alwei:20140910201815j:plain

ゲームを実行してみれば一瞬ですが、左上に"Hello World!!"という文字列が表示されたと思います。これでもう関数の追加ができました。あとはブループリント上でどこからでも使用できます!

実際にノードを作る際にはC++側で引数や戻り値は自由に設定できます。指定されたUE4に対応した型を使用すれば自動的に認識されますので、色々と追加して、関数内部の処理をどんどん作ってみましょう。

関数ライブラリーからアクターへ

今回はどこからでも使用可能な関数ライブラリーでしたが、次回はアクターをベースとしたクラス編も書いてみます。クラスでは更にクラス情報に"UCLASS"や変数としてのプロパティ情報の"UPROPERTY"がでてきます。

これらを使いこなせば自由にC++からブループリントへの連携ができるようになってくると思います。

追記:アクタークラス編も書きました