ビデオの内容紹介
Construction Script ノードを使ってコンテンツを作成する方法を 2 つの例を挙げて説明しています。
原題 Unreal Engine 4 Blueprint QuickShot – 6 – Making Procedural Content
作るもの①
Construction Script ノードを使って、エディタ内でライトのオン/オフを切り替えられるようにします。
このグラフの意味
Construction Script は、ブループリントの基本的な構成要素⑩ ループの利用: プロシージャなレベル デザインですでに登場していますが、再度まとめると、Construction Script が発動する条件は、次のようになります。
(1) Construction Script を含むクラスブループリント (のアクタ) がレベル内に配置された瞬間。
(2) Construction Script に関わるプロパティ (変数) などがそのクラスブループリントで変更され時。
(3) Construction Script を含むクラスブループリント (のアクタ) が、レベルエディタ内で変更された場合 (ビューポート内でウィジェットを使って / エクスポーズ (表示) されているプロパティによって)。
(以上のことは、下の方にある実験でご確認ください。)
ここでは、ビューポートにこのアクタ (このクラスブループリントのインスタンス) が配置された場合のことを考えてみます。アクタが配置された瞬間に、Construction Script が発動するので、それにつながる Set Visibility (見え方をセットする) ノードが実行されます。
この Set Visibility ノードは、Target につながっている PointLight1 (ポイントライト) のビジビリティ (見え方) を New Visibility につながっている LightOn に基づいてセットします (変更します)。
ですから、LightOn の Default Value (初期値) に true (チェックが入っている状態) の場合は、Set Visibility ノードがこのポイントライトを見えるようにします。
グラフ作成のための注意点
① クラスブループリントの作り方:
コンテンツ ブラウザから Propts フォルダを選択 → SM_Lamp_Ceiling を右クリック → Create Blueprint Using (これを使ってブループリントを作成する) をクリック → Lamp という名前を付ける
② ポイントライトの追加の仕方:
(ブループリントエディタ右上が ) Component モードになっている状態で Add Component (コンポーネントを追加) をクリック → ドロップダウンメニューから Point Light を選択 → Point Light をランプの電球に該当する部分まで移動する
③ Construction Script を組むためには:
ブループリントエディタ右上で、Graph モードに切り替える → Construction Script タブをクリックする (Construction Script ノードが見えない場合は、右クリックしながら左上方向を探す)
④ LightOn 変数をセットアップするためには:
My Blueprint パネルで +Variable (変数をプラスする) をクリック → 名前を LightOn にする → 右横の目のアイコンをクリックする (これでレベルエディタにもエクスポーズされます) → Compile する (これで Default Value が表示されます) → Default Value にチェックを入れる
実験
① Construction Script に関わるプロパティ (変数) などがそのクラスブループリントで変更され時に Construction Script が実行される様子をご覧ください。初期状態は、LightOn の Default Value にチェックが入っていて (true の状態)、実際ビューポート内でもライトがついています。
ここで、クラスブループリント側 (画像では左側) の Default Value のチェックを外してみます (false にする)。すると Construction Script ノードから Set Visibility ノードに至るワイヤが赤くなって実行されていることが分かります。その結果、ビューポート内でもライトが消えるとともに、レベルエディタにエクスポーズされている LightOn のチェックも外れました。
②次に、Construction Script に関わるプロパティ (変数) などがレベルエディタにエクスポーズされている場合、そのプロパティ (変数) が変更された時に Construction Script が実行される様子をご覧ください。初期状態は、LightOn にチェックが入っておらず (false の状態)、実際ビューポート内でもライトが消えている、上の画像の状態をそのまま使います。
レベルエディタにエクスポーズされているプロパティ (変数) を変更すると、次のように、Construction Script ノードから Set Visibility ノードに至るワイヤが赤くなり、実行されていることが分かります。ビューポート内でもライトも消えました。ただし、Default Value は変更されません (あくまでも Default Value は単なる「初期値」であるため)。
作るもの②
ランダムに位置が変わるアクタを配置する Construction Script を作ります。
ブループリントの意味
アクタ (このクラスブループリント) がレベルに配置されると、Construction Script が発動して、ForLoop が開始されます。ForLoop は 1 から HowMany に入っている数まで繰り返されます。
繰り返される処理は、Loop Body につながっているノードです。ここでは、Add StaticMeshComponent が繰り返されます。
Add StaticMeshComponent は、スタティックメッシュをレベルに追加する関数です。追加するものの情報は Target に供給されます。ここでは self になっているので、このアクタ自身すなわち例の四角い物体 (SM_CornerFrame) です。これが追加されるわけです。
また、そのアクタが追加される位置は、ドラッグアンドドロップする位置 (親の位置) を起点 (0, 0, 0) にしてそこから、Random Unit Vector で作られたベクタ方向に倍数分だけ移動させた位置です。
グラフ作成のための注意点
① 新たなブループリントを作成するには:
コンテンツ ブラウザで New をクリック → Blueprint をクリック → Asset をクリック → Many Boxes という名前を付ける → Many Boxes をダブルクリック → Graph モードに切り替える → Construction Script タブをクリックする (Construction Script ノードが見えない場合は、右クリックしながら左上方向を探す)
② 変数 HowMany をセットアップするには:
My Blueprint パネルで +Variable (変数をプラスする) をクリック → 名前を NowMany にする → 右横の目のアイコンをクリックする (これでレベルエディタにもエクスポーズされます) → Compile する (これで Default Value が表示されます) → Default Value を 4 にセットする
③ ForLoop をセットアップするには:
First Index (ループの始まりの値) を 1 に、Last Index (ループの終わりの値) は、How Many を接続します。
④ Add StaticMeshComponent をセットアップするには:
Add StaticMeshComponent (スタティックメッシュを追加する) ノードで発生させるメッシュは、Details タブの Static Mesh セクションのドロップダウンメニューから SM_CornerFrame を選択します。
⑤ Random Unit Vector につながっている掛け算は、Vector × Float です。Vectro*Float で検索できます。掛け算に 100 をセットします。
実験
Random Unit Vector (ランダムな単位ベクタ) の働きを調べるために、次のようなグラフを作ってみました。
これは、Z キーを押すと Random Unit Vector によってランダムに単位ベクタが作り出されるので、それをまず Unit Vector という変数にセットして (保存して)、さらに Print String で表示しています。次にその Unit Vector の距離 (長さ) を Distance という自作の関数で計算します。その結果を表示して、次に Unit Vector を 100 倍して MultipliedVector という変数にセットして、それを表示します。最後にこの 100 倍されたベクタの距離 (長さ) を計算しています。なお、Distance という関数の中身は次のようになっています。
ベクタの成分をばらして (Break Vector) それぞれ float 型の変数 X、Y、Z に入れてから、 2 乗して (Square) 足しあわせて (Addition) から、その平方根 (Root) を返します (ReturnNode)。つまり、ピタゴラスの定理を利用してベクタの長さを計算しています。
結果は、次のようになります。
ベクタの各成分が 100 倍されていることが分かります。また、長さも 1.0 から 100.0 になっていることが分かります。
単位ベクタ (単位ベクトル) とは、結果の画像からも分かるように、長さが 1 のベクタのことです。こうすることによって、掛け算などで扱いやすくなります。つまり、上記のように、単位ベクタに数値を掛けて何倍かすると、その方向に倍数分だけ離れた位置 (Location) をベクタという形で求めることができます。たとえば 28 倍すると、そのベクタの方向に 28 の長さのところにある位置をベクタという形で求めることができるのです。
今回は、ここまでです。お疲れ様でした。