ビデオの内容紹介
Expose on Spawn というブループリントのプロパティの使い方を、具体的にスタティックメッシュを使って説明しています。
原題 Unreal Engine 4 Blueprint QuickShot – 11 – Expose On Spawn
作るもの
あるキーを押すと、ある地点からスタティックメッシュがいろいろな方向にスポーンするブループリントを作ります。
作成手順と留意事項
① Test1100 について
最初にコンテンツ ブラウザの Props フォルダの SM_CornerFrame (スタティックメッシュ) を右クリック → Create Blueprint Using… (ブループリントを作成する) を選択 (名前を Test1100 としました) → Components モード (画面右上) で Details パネルの Physics セクションの Simulate Physics にチェックを入れます。(これにチェックを入れないとどうなるかは、下の方にある実験をご覧ください。)
Construction Script では、+Variable をクリックして、IntialVel (=初期ベロシティ) という名の Vector 型の変数を作り、Details パネルの Expose on Spawn (スポーン時にエクスポーズ) と Editable (編集可能) にチェックを入れます。(Editable にチェックを入れると、自動的に目のアイコンも「開眼」します。逆に目のアイコンをクリックすることによっても Editable にチェックが自動的に入ります。)
② Example_Map Level Blueprint について
Example_Map Level Blueprint を開くには、エディタのツールバーの Blueprints をクリック → Open Level Blueprint を選択します。
まずスタティックメッシュがスポーンする地点をセットしておきます。それには、エディタの Modes タブの Place モード (左端のアイコン) にして Basic を選択 → TargetPoint をドラッグアンドドロップします。
変数 TargetPoint1 を得るには、ビューポートで先に設置した TargetPoint を選択状態にしてから、右クリック メニューから、Add Reference to TargetPoint1 (TargetPoint1 への参照を追加する) を選択します。(TargetPoint を選択状態にしておかなければ、右クリック メニューに Add Reference to TargetPoint1 が表示されません)。
Example_Map Level Blueprint では、SpawnActor from Class (クラスからアクタをスポーンする) という関数を設置して、Class 欄で Test1100 を選択します。
Random Unit Vector 関数につながっているノードは、Vector × Float です。
Initial Val のピンが表示されない場合は、Class 欄でもう一度クラスを選びなおしてみてください。
ブループリントの意味
① Test1100 の方
Construction Script の役割については、ブループリント クイックショット⑥ プロシージャルなコンテンツの作成にまとめられています。
そのうち、今回の場合にとって重要なことは、「Construction Script を含むクラスブループリント (のアクタ) がレベル内に配置された瞬間」にその Construction Script が発動するということです。
つまり、もう一方のブループリントである Example_Map Level Blueprint の方で、この Test1100 (クラス) によるアクタがレベルに配置されると、自動的にこの Construction Script が発動されることになるのです。
Construction Script が発動すると、Set Physics Linear Velocity (物理線速度をセットする) が発動します。Target は、スタティックメッシュ、つまりこのクラス ブループリントによって配置されるアクタです。New Vel は「新たなベロシティ (速度)」で、これは、InitialVel によって供給されます。なお、ベロシティとは方向がともなった速度であり、次の②で例をあげて説明します。
以上をまとめると、スタティックメッシュがスポーンすると、Construction Script が発動して、スタティックメッシュのベロシティがセットされる、ということになります。
② Example_Map Level Blueprint の方
キーボードの F キーを押すと、SpawnActor が発動します。
Spawn Transform (スポーンのトランスフォーム) は、スポーン位置(等) を指定します。そこには、
TargetPoint1 ― Get Actor Transform
がつながっているので、TargetPoint1 (つまりスタティックメッシュの出現位置) のトランスフォーム (位置等) を取得して、それを Spawn Transform に渡しています。つまり、スタティックメッシュがスポーンされる位置は、TargetPoint1 ということです。
Random Unit Vector は、ブループリント クイックショット⑥ プロシージャルなコンテンツの作成で詳しく調べていますので、そちらも参考になさってください。
Random Unit Vector (ランダムな単位ベクタ) は、ランダムに単位ベクタが作り出します。単位ベクタとは、ある点 (この場合は、TargetPoint1) から距離が 1 (cm) となる (x, y, z) の値のことです。距離が 1 になるということは、√(x^2+y^2+z^2) が 1 になるということです。このようになる x, y, z の値をランダムに供給するわけです。
たとえば、(0.969, 0.247, 0.029) などがその一例です。これを 1000倍した (969, 247, 29) が InitialVel (初速、初期ベロシティ) につながっています。つまり、アクタがスポーンする際の (方向付き) 速度が供給されることになります。
スタティックメッシュがスポーンすると、(969, 247, 29) に向かって (= どのような x, y, z でも距離は 1000 cm なので、1000 cm/s の速度で) スタティックメッシュが TargetPoint1 からスポーンして飛んで行きます。その後は慣性の法則や重力などの物理法則によってシミュレートされて、放物線を描くように地面に落下します。
ところで、この InitialVel は元々は、Test1100 の変数でした。SpawnActor 関数にこの変数が Expose (露出する) したのは、もちろん、InitialVel 作成時に Expose on Spawn (スポーン時に露出する) にチェックを入れたためです。Expose とは、他からもその変数を使用できるようにすることです。
実験
理解を深めるために、いくつか実験してみました。
まず、Test1100 のスタティックメッシュについて、Details パネルの Physics セクションの Simulate Physics にチェックを入れなければどうなるかやってみます。
結果は、次のようになりました。
スポーンはしますが、物理法則に従わないため、ずっと宙に浮いたままで、落下すらしません。
次に、Test1100 の Construction Script の Details で、Expose on Spawn にだけチェックを入れてコンパイルしてみました。すると、
のように、警告が出ました。つまり、「Expose on Spawn を使うなら、Editable にもせよ」ということなのですが、Expose というのは、他からもその変数を使用できるようにするということなので至極当たり前のことと言えます。
更に、Construction Script と Expose on Spawn についての理解を深めるために、Construction Script を使わずに (InitialVel も Expose しないで) 同様のことを実現してみました。
ここで NewVar とは、SpawnActor の返り値、つまりスポーンしたアクタを格納した変数です (Return Value を右クリックして Promote to Variable [変数に昇格] を選択してオリジナルの名前を付けていない状態です)。
結果は、まったく同じようになります。SpanActor より右側は、Construction Script の役割だったのですが、このように SpawnActor の後に直接くっつけることもできます。Construction Script はやはり、そのアクタがスポーンされると発動されていたと分かります。
お疲れさまでした。今回はここまでです。
コメント
勉強になります。ありがとうございます。
読んでくださって、ありがとうございます。一緒に勉強しましょう!