Unreal.jsプラグインでは通常JSの実行手段はJavascriptコンポーネントを任意のActorにつけるか、ファイル名をextension-*.jsとする方法がある。ただし前者では何らかのActorをワールドに出す必要があり、後者はそもそもエディタの拡張用である。
可能なら任意のタイミングでBlueprint(以下、BP)からJS呼び出しのタイミングを制御したい。今回はその方法を簡単に説明する。
ゲーム起動時にJSを実行:カスタムGameInstanceクラスで呼ぶ
UE4ではゲームを最初に呼び出したときにGameInstanceというクラスBPが呼ばれるが、このクラスBPはプロジェクト設定で任意のものに変更ができる。この機能を使ってJSを呼ぶBPを組んでおけば、ゲーム起動時にJSを実行できる。
カスタムGameInstanceクラスの準備
- コンテンツブラウザのメニューから新規でBPクラスを作成する
- 親クラスに
GameInstanceを指定 - 適当な名前を付けて保存(例では「HelloFromBP」)
- メニューのEdit > Project Settings... を選択
- 「Map & Modes」を選択し、さっき作成したカスタム
GameInstanceクラスを指定
呼び出されるJSの用意
/Content/Scripts/以下に任意の名前のJSを用意する。今回は以下の内容で。
console.log("hi console log!")
BPからJSを呼ぶノードを組む
- カスタム
GameInstanceクラスをダブルクリックなどしてBPエディタを開く - 以下のようなノードを組む
- Event Initから開始
-
Construct Object from Classノードを追加- Outerピンには自身
self - クラスは
JavascriptIsolateを指定
- Outerピンには自身
-
Create Contextノードを追加- Unreal.js導入で追加されるノード
- (任意)JSからイベントを呼べるように
Exposeノートを追加- 後述
-
Run FileもしくはRun Scriptノードを追加-
Run Fileはファイルを指定するノード。例ではhi.jsを指定 -
Run Scriptは文字列をスクリプトとして実行するノード
-
BPをコンパイルして実行
JavascriptConsoleに上記のログが出ればOK.
※なおGameInstanceからはそのままではGWorldが取得できないので注意。
レベル読み込み時に実行:レベルBPから呼び出す
開始のノードがEvent BeginPlayであること以外は基本的には同じように呼び出せる。
もちろん、開始ノードをEvent BeginPlay以外にすることで任意のタイミングでJSを実行可能。
おまけ:JSからBPを実行する
カスタムGameInstanceクラスにExposeノードで名前を付けておくことでJSから呼び出せるようになる。
たとえばHelloFromBPと名前を付けておく。
適当な名前(例:「HelloBP」)でカスタムイベントを作成するとそのカスタムイベントを以下の形でJSから呼び出せる。
HelloFromBP.HelloBP();
なお、WikiにはクラスBPを継承したクラスをJSで作る例も載っているので併せて読むといいかもしれない。
まとめ
- BPからJSを呼ぶには以下のノードの組み合わせでできる
-
Construct Object from Class- クラスは
JavascriptIsolateを指定
- クラスは
Create Context-
Run FileorRun Script
-
-
GameInstanceやレベルBPなどの任意のBPの任意のタイミングから呼べる - JSから見えるようにしておけば(
Expose)JSからBPのカスタムイベントを呼ぶこともできる







