17.ブループリント実践:ブループリントクラス編
ブループリントクラスとは?
ブループリントクラスとは簡単に言うと「ブループリント付きのアセット」の事です。もう少し正確に言うとブループリント付きのアクタの設計図です。エディタ上で言うとこのアセット↓の事になります。
https://scrapbox.io/files/65b50da18a06020026d17afc.jpg
主にレベル上の何らかの機能を持ったアクタを用意したい時にブループリントクラスのアセットをコンテンツブラウザで作成して使用します。ゲーム内で移動するとか回転するとか何らかの機能を持ったものを作成したい時にはブループリントクラスを使用して実装します。
作成したブループリントは、『BluePrints』というフォルダを作成して、その中に格納しておくといいでしょう。
https://scrapbox.io/files/65b50ede91312a0023ac15a9.jpg
🌟Step1:ブループリントクラスで移動するキューブを作ってみよう
ブループリントには大きく分けて2種類あるという事で、さきほどはレベルブループリントについて解説しました。今回はもう片方のブループリントクラスについて解説していきます。
https://scrapbox.io/files/65b50d77ed8ad10024c1be9c.gif
🌟ブループリントの種類と作成
①Blueprintsフォルダを開いて、右クリック > ブループリントクラスを選択します。
https://scrapbox.io/files/65b50f577b53070024a80529.jpg
②次に、以下のようなウィンドウが表示されるのでActorを選択します。
https://scrapbox.io/files/65b50c75e6ced80025ff598b.jpg
この「親クラスを選択」ウィンドウの意味とは?
このウィンドウでは作成するブループリントクラスの下敷きを選ぶ事ができます。それぞれの項目については詳しく後から解説しますが、例えばコインやアイテムなどのレベル上のアクタを作成する場合には「Actor」を選択します。操作するキャラクターなどの作成したい時には「Character」を選択します。といった感じに作るゲームの機能に合わせてここでは選んでいきます。今回はレベル上で移動するキューブを実装するのでActorを選択します。
③ブループリントクラスを作成したら名前を「BP_MovingCube」にします。これもF2キーで名前はいつでも変更可能です。
https://scrapbox.io/files/65b50fb1b2f56400258a008d.jpg
ブループリントクラスの命名については「BP_」と付けるのがおすすめ
ブループリントクラスの基本的な命名は「BP_」+「わかりやすい英語の名前」が良いです。例えば「BP_Character」とか「BP_Coin」「BP_Item」みたいな感じです。「BP_」を付けるべき理由としてはアセットを探す時に名前でだけで判別しなければならない状況が稀にあります。
④BP_MovingCubeをダブルクリックするとブループリントエディタが開かれます。
中央のウィンドウがビューポートになっている事を確認します。ビューポートではない場合はビューポートタブをクリックして開いておきましょう。
https://scrapbox.io/files/65b511469adae00025eeb5fa.jpg
ブループリントクラスの場合のブループリントエディタを解説!
レベルブループリントのブループリントエディタでは、ブループリントを編集するイベントグラフだけですがブループリントクラスの場合はウィンドウが増えます。ブループリントクラスの場合のブループリントエディタはアクタの見た目を確認する「ビューポート」と、コンポーネント(アクタを構成する部品)を編集できる「コンポーネント」ウィンドウが増えています。
https://scrapbox.io/files/65b511f2f673a8002597cde8.jpg
⑤コンポーネントウィンドウから追加 > キューブを追加します。
https://scrapbox.io/files/65b51060822ec10023def2c5.gif
⑤コンパイルして、一旦このブループリントクラスをレベルに配置してみましょう。
https://scrapbox.io/files/65b510ee9adae00025eeb380.gif
⑥ここからこのキューブに移動する機能を追加していきます。
イベントグラフを開きます。
https://scrapbox.io/files/65b5128989fa460025bfc70f.jpg
イベントグラフとは?
イベントグラフとはブループリントを作成,編集する場所です。ブループリントクラスの場合は、レベル上にそのブループリントクラスがある場合に、イベントグラフで作ったブループリントがゲームに反映されます。
⑦イベントtickの実行ピン(矢印)からドラッグして離し、AddActorLocalOffsetノードを作成します。
https://scrapbox.io/files/65b5130f19b9af0025447464.gif
AddActorLocalOffsetのDeletaLocationのXに1と入力し、コンパイルします。
https://scrapbox.io/files/65b5135391312a0023ac43c9.jpg
AddActorLocalOffsetノードとは?
このノードは簡単に言うとアクタを移動させるノードです。DeltaLocationの項目に入力された数値分、アクタの位置に加算して移動させます。なので今回DeletaLocationのX軸に1と入力したので、位置のX軸に対して1が足されて移動するといったノードになっています。
アクタを選択した時に詳細に出てくるトランスフォームが表示されます。そのトランスフォームの位置に入力値分加算するノードという事になります↓
UnityのUpdate関数におけるTranslateと類似している。
これでレベルエディタに戻ってプレイしてみましょう。配置したBP_MovingCubeが移動するようになりました。
https://scrapbox.io/files/65b50d77ed8ad10024c1be9c.gif
Add Actor Local OffsetとAdd Actor World Offsetの主な違い
座標系の基準: Add Actor Local Offset はアクターのローカル座標系に基づいて移動しますが、Add Actor World Offset は世界座標系に基づいて移動します。
移動方向: Add Actor Local Offset はアクターの現在の向きに依存する移動を行いますが、Add Actor World Offset はアクターの向きに関わらず一定の方向に移動します。
この組み合わせたノードで「毎フレーム、アクタのX軸に1を足す」という処理を行っています。
https://scrapbox.io/files/65b5160222990100242f2d50.jpg
🌟Step2:ブループリントクラスで回転するキューブを作ってみよう
https://scrapbox.io/files/65b51835d2750f0024e67448.gif
①Blueprintsフォルダを開いて、右クリック > ブループリントクラスを選択します。
https://scrapbox.io/files/65b50f577b53070024a80529.jpg
②次に、以下のようなウィンドウが表示されるのでActorを選択します。
https://scrapbox.io/files/65b50c75e6ced80025ff598b.jpg
③ブループリントクラスを作成したら名前を「BP_RotatingCube」にします。
https://scrapbox.io/files/65b51d0b86ba040024e8d478.jpg
④コンポーネントウィンドウで、追加 > StaticMeshを追加します。
StaticMeshコンポーネントを選択した状態で、詳細のスタティックメッシュからSM_ChamferCubeを選択します。
https://scrapbox.io/files/65b51ce9b2eb1a00284ebbed.jpg
⑤イベントグラフを開き、イベントTickのピンからドラッグして離し、「add actor local Rotatioin」と検索しAddActorLocalRotationノードを作成します。
https://scrapbox.io/files/65b51dc8043f6e0025de973a.gif
https://scrapbox.io/files/65b51724bedd23002471ea37.jpg
https://scrapbox.io/files/65b518108663070024430e1d.gif
AddActorLocalRotationノードとは?
AddActorLocalRotationノードとはアクタを回転させるノードです。正確に言うとアクタの回転軸に対してDeltaRotationの数値分足すノードです。なのでアクタの回転軸を変更するこの操作↓をこのAddActorLocalRotationノードで行えるという事になります。
今回DeltaRotationのX軸に1と入力したので、このノードが実行される度にアクタのX軸が1度足されて回転します。
プレイしてみると..キューブが回転するようになりました↓
https://scrapbox.io/files/65b51835d2750f0024e67448.gif
なぜキューブが回転するようになったのかまとめると、イベントTickノードは「毎フレームつなげたノードを実行する」という機能を持ったもので、AddActorLocalRotatationノードは「DeltaLocationの数値分アクタの回転軸に足して回転させる」という機能を持ったものになっています。この二つのノードを繋ぐ事で「毎フレーム、アクタを回転させる」という機能になり、ゲームをプレイするとアクタが回転し続ける機能になります。
https://scrapbox.io/files/65b52bcf3226950024a5ba0f.jpg
今回のブループリントクラスは、ステージにおける回転する床ギミックとしても活用できます。
https://scrapbox.io/files/65b52cd01b2ac50024f6786d.jpg
🌟ブループリントの検索
https://scrapbox.io/files/65afa2420150900024cf1294.jpg
①ブループリントのアイコンを選択
②ブループリントクラスを開くを選択
③検索欄に開きたいブループリントの名前を入力する。
🌟ブループリントを学習する時のコツ
①とにかくいろいろ作ってみる。
ブループリントを学習していく上で重要なコツとしては「とにかく作って覚えていく」という事です。ブループリントは使っていけば自然と覚えていけます。
②種類分けされたノードのリストを作っておく
ノードには膨大な種類があるので、一度使ったノードは種類ごとに分けてリストにまとめておくといいです。
全部まとめるのがしんどい場合は、よく使うノードのみをリストに記入していけばいいと思います。
③実現させたい内容をチャットGPTに提案する。
例:『UE5のブループリントで常にアクタを回転させるシステムを作るにはどうすればいいですか?』など聞くのもいいです。そうすると、ChatGPTが必要なノードをリストアップしてくれます。