18.ブループリント実践:スポーン編
🌟Step1:アクタをスポーンさせてみよう!
https://scrapbox.io/files/65b543d2479b1c00231a85fd.gif
実際のゲームでは、例えば敵をスポーンさせたり、アイテムをスポーンさせたり様々な状況でゲームプレイ中にアクタをスポーンさせる必要が出てきます。そんな時に今回紹介するノードを活用していきましょう。
①レベルブループリントを開く
https://scrapbox.io/files/65b5445fdfbbb600255a6d18.jpg
②開いたら右クリック > BeginPlay(ゲーム開始時に処理するノード)を作成して、その後SpawnActorfromClassノード、日本語だと「クラスからアクタをスポーンします」ノードを作成します。
https://scrapbox.io/files/65b5447d02aead002475cfe6.gif
バージョンによっては、表記が日本語になったり英語になったりします。
https://scrapbox.io/files/65b544eb29aeac0024352abb.jpg
SpawnActorfromClass(クラスからアクタをスポーンします)ノードとは?
アクタをスポーン(生成)するためのノードです。Classと書かれた項目で生成するブループリントクラスを選択できます。またSpawnTransformと書かれた場所で生成するアクタのトランスフォーム、つまり位置や回転,大きさを設定する必要があります。どんな感じに設定していくのか下で解説していっています↓
③Classに作成したいブループリントクラスを選択します。
https://scrapbox.io/files/65b545a4da1a800025b63a7b.jpg
次に生成する場所となるトランスフォーム、SpawnTransformですが、初期状態だと数値を入力できない状態になっています。そこで「構造体ピンを分割」という機能を使用します。
④SpawnTransformと書かれた場所で右クリック > 構造体ピンを分割を選択します。
https://scrapbox.io/files/65b545d929aeac002435323d.gif
こんな感じにトランスフォームの数値が分割されて表示されます。
https://scrapbox.io/files/65b546509e25500025820427.jpg
構造体ピンを分割とは?
この構造体ピンを分割では、まとまったデータを分割して表示させる事ができます。例えば今回の場合、「SpawnTransform」はTransform(トランスフォーム)という位置,回転,拡大縮小のデータがまとまったデータになっていました。それを分割した事により位置,回転,拡大縮小のデータをそれぞれに分割できたという事になります。分割する事で、それぞれのデータに対して個別に入力する事ができます。また変数についてはもう少し後のページで説明しますが、構造体ピンを分割しなくても変数を使用すれば値を決定する事ができます。
⑤今回、プレイヤーの目の前にアクタをスポーンさせたいので、プレイヤーをスポーンさせるPlayerStartを選択してトランスフォームを確認しましょう。
https://scrapbox.io/files/65b5471f39331e002502d7bb.jpg
という事で生成する場所の大体のトランスフォームを確認できたので、レベルブループリントに戻ってLocation(位置)の項目を「X軸を1300,Y軸を1110,Z軸を92」にしましょう。プレイヤーの正面方向となるX軸だけ少しずらしています。
https://scrapbox.io/files/65b547353659c800241129bb.jpg
④プレイしてみましょう。ゲーム開始時にアクタがスポーンされるようになりました↓
https://scrapbox.io/files/65b543d2479b1c00231a85fd.gif
🌟Step2:アイテム(銃)をゲーム開始後数秒後にスポーンさせる!
①Blueprintsフォルダの中で右クリック > ブループリントクラス > Actor > 名前をBP_Gunにします。
https://scrapbox.io/files/65b548a84cb9f00025bd50fb.jpg
②BP_Gunを開いて追加からSkeltalMeshコンポーネントを追加します。
https://scrapbox.io/files/65b548ca02aead002475f983.jpg
③SkeltalMeshコンポーネントを選択した状態で、メッシュのスケルタルメッシュからSK_FPGunを選択します。
https://scrapbox.io/files/65b548ea02aead002475fa46.jpg
SkeltalMeshとは?
SkeltalMeshコンポーネントとは、簡単に言うとアニメーションが行える状態のメッシュの事です。正確に言うとスケルトンが入っているメッシュの事になります。スケルトンとはアニメーションを行うためのメッシュに内蔵されている骨の事です。この銃のメッシュはスケルタルメッシュとなっていたため、SkeltalMeshコンポーネントを追加して見た目を表示させた形になります。使い方としてはStaticMeshコンポーネントと同じような感じでメッシュを表示させるコンポーネントになります。
④次にアイテムのエフェクトっぽくライトのコンポーネントを追加していきます。ただし。ブループリントエディタだとライトを付けてもわかり辛いのでレベルに配置して編集していきます。
BP_Gunをレベルの適当な位置に配置します。
https://scrapbox.io/files/65b54998f2b61d00256ed021.jpg
詳細の追加からPointLightを追加します。
https://scrapbox.io/files/65b549aa0c40880024489520.jpg
PointLightを選択した状態で、詳細のライトの項目から影を表示するCastShadowのチェックを外します。その後LightColorは適当に青色にしておきます。
https://scrapbox.io/files/65b54a1729aeac0024355c70.jpg
ここからすごく大事!
レベル上で変更しても元のブループリントクラスには基本的には影響しない
レベル上に出したブループリントクラスのコンポーネントや大きさなどを変更しても、元のブループリントクラスには変更は適用されません。
https://scrapbox.io/files/65b54a47d384bd0025749939.jpg
なのでこの時点でブループリントクラス「BP_Gun」を開いてもレベル上で追加したライトコンポーネントはブループリントエディタでは確認できません。
https://scrapbox.io/files/65b54a77226aae00249febb0.jpg
🐈では、どうすればレベル上で行った変更を元のブループリントクラスに適用できるのでしょうか?
④インスタンス変更をブループリントクラスに適用する
レベル上のBP_Gunを選択した状態で、詳細の追加ボタン横にあるブループリントのボタンをクリックし、「インスタンス変更をブループリント(ブループリントクラスの事)に適用」ボタンを押します。
UnityでいうところのPrefabのOverrideと同義になるかと思われます。
https://scrapbox.io/files/65b54b0053b5b000253ef7c4.gif
これでレベル上で行ったブループリントクラスの変更を元のブループリントクラスに反映させる事ができました。
⑤変更の反映を確認する
ブループリントクラス「BP_Gun」を開いて確認してみましょう。
PointLightコンポーネントが追加されているのが確認できます。
https://scrapbox.io/files/65b54b7a3659c80024115b94.jpg
もちろんわざわざレベル上でPointLightコンポーネントを追加しなくても、ブループリントエディタ上で追加すれば良いのですが、ブループリントエディタだと光の当たり具合がいまいちよくわかりません。なので一度レベルに出す→レベル上で変更→元のブループリントクラスに適用といった方法を行いました。
調整用にレベル上に出したBP_GunはDeleteキーで削除しておきます。
https://scrapbox.io/files/65b54c061bd71900253eb787.gif
これで生成するブループリントクラスの準備が完了したので、実際にこの銃が生成される処理を作っていきましょう。先ほど作ったレベルブループリントのノードの内容を変更していきます。
⑥作成したブループリントクラスをスポーンさせるクラスに設定する
レベルブループリントを開きます。ノードは先ほどキューブを生成したノードのままで良いです。
SpawnActorfromClassノードで生成するブループリントクラスとなるClassの項目をBP_Gunにします。
https://scrapbox.io/files/65b54c8c02aead002476189b.jpg
⑦時間差でスポーンさせるようにする
生成される瞬間を確認するため、ゲーム開始直後ではなく一秒遅らせて生成させましょう。
まずはAltキーを押しながら矢印(実行ピン)か白い線(実行ワイヤー)をクリックしてワイヤーを切断します。
https://scrapbox.io/files/65b54ccf3659c8002411659d.gif
ワイヤーの切断について
Alt+クリックで行えるワイヤーの切断は重要な操作になってくるので、覚えておきましょう。クリックするのはピンかワイヤーどちらでも構いません。
BeginPlayからDelayノードを作成し、Durationを1にします。その後SpawnActorノードに接続します。
https://scrapbox.io/files/65b54d40eb342d0025abe0ea.jpg
⑧設定できたらコンパイルをして、実際にプレイしてみましょう。
🌟実践演習
スポーンさせたクラスが、Z軸に自動回転するように修正を加えてみましょう。
https://scrapbox.io/files/65b553dc4cb9f00025bda7db.gif