今回は、ブループリントの基礎です。
そもそもブループリントがどういったものなのか?やブループリントエディタの見方、使い方、変数についてなど紹介していきます。
ブループリントは、プログラマーでなくても扱いやすいのが、良い所の一つなので、プログラミングの知識がない方にも、なるべくわかるように説明してみようと思います。
今回は、サードパーソンテンプレート を例にちょっとした処理を作るチュートーリアルに沿って、ブループリントの基本的な使い方を説明していきます。
ブループリント とは?
ゲームでは、キャラクターを操作して歩いたり、ジャンプしたりなど当たり前ですが、これらはプログラミングで作られています。
それは、UE5も例外ではありません。
UE5でのプログラミングは、2つあり、C++でコードを書く方法とブループリントを使う方法です。
ブループリントは、コードを書くプログラミングとは違い、「ノード」というものを繋げて、ジャンプなどの動きや機能などを作っていきます。
各ノードは、それぞれ機能を持ちます。
例えば、(デバッグ用に)単純に文字を表示するノード(Print String)、条件によって処理を分岐させるノード(Branch)など様々なものがあり、それらを繋いでいくことで、「コントローラーのスティックを前に倒したらキャラクターが前に歩く」と言った処理、機能を作っていきます。
本質的には、プログラミングと同じですが、ある程度の機能を持ったノードが準備されていて、それを繋げばよい(簡単に言えば)ので、非エンジニアでも使いやすいのが特徴です。
プログラミングを勉強していたけれど、途中で挫折したという方は、プログラミングの基礎知識はあると思うので、ブループリントなら、扱えるようになるのではないかなと思います。
実際、私がそうでした。
ブループリントエディタの使い方
ブループリントは、ブループリントエディタという専用のウィンドウで処理を作っていきます。
サードパーソンテンプレートでプレイを押すと、W, A, S, Dキーで歩くことができます。
では、この歩く処理がどこで作られているのか、このブループリントのブループリントエディタを開いて見てみます。
キャラクター(ThirdPersonCharacter)を選択し、World OutlinerのTypeの列の「Edit ThirdPersonCharacter」をクリックします。
そうすると、ThirdPersonCharacter というアセットのブループリントエディタが開きます。
このようにブループリントを持っているアセットをブループリント クラスと言います。
ブループリントエディタの見方
① Components
ブループリント クラスは(全てではありません)、1つのアセットの中に複数のメッシュやカメラ、コリジョンなどを入れることができます。
このブループリントの中では、それらを「Component」と言います。
例えば、レベルにカメラを置くときは、カメラーアクターでしたが、BPの中では、カメラコンポーネントになります。
スタティックメッシュもスタティックメッシュコンポーネントと言います。
なので、部品(コンポーネント)でアクターを構築し、そのアクターをレベルに配置するイメージです。
このThirdPersonCharacterでは、「SK_Mennequin」というスケルタルメッシュがセットされたSkeletal Mesh Componetであったり、プレイヤーの視点となるCamera Component、キャラクターの当たり判定に使うコリジョンのCapsule Componentなどで構成されています。
左上の「ADD」からコンポーネントを追加することができます。
スタティックメッシュとかだとコンテンツブラウザからD&Dで追加することも可能です。
② Viewport
追加したコンポーネントの見た目をこちらで確認することができます。
③ Event Graph と Construction Script
ブループリントの処理を作っていくのは、主にEvent Graphになります。
ブループリントを作成していく場所は、その他にもレベルに配置されたときなどに処理をするためのConstruction Scriptや関数、マクロなど様々なものがありますが、ここでは割愛します。
歩いたり、ジャンプしたりなどの処理は、こちらで作られています。
④ My Blueprint
こちらにあるものは、後ほど詳しく説明しますが
変数や関数を作成、管理したりすることができます。
⑤ Details
レベルエディタでの、Detailsと同じようなものです。
コンポーネントを選択すれば、そのコンポーネントのDetailsが表示され、変数やノードを選択すれば、そのDetailsが表示されます。
ブループリントで機能を作ってみる
ここから、チュートーリアル形式で、ちょっとした処理を作りながらブループリントを説明していきます。
Event Graphには既に歩いたり、ジャンプしたりと言った処理がありますが、同じくThirdPersonCharacterのEvent Graphに処理を追加してみます。
文字を出力してみる
プログラミングで一番、最初にやる王道なこと、単純に文字を表示してみたいと思います。
Event Graphの開いているスペースでtabキー、またはMLBを押します。
そうするとノードの一覧と検索ウィウンドウが出てきます。
ここでノードを検索して、ノードを追加していきます。
まず、「Event BeginPlay」というノードを検索し、そのノード名をクリック、または、そのノードがハイライトになっている状態でEnterを押します。
そうすると、ノードをGraphに追加することができます。
この赤色のノードは、イベントノードと言って、処理の開始に使うノードです。
この「Event BeginPlay」は、Playした時の一番最初に1回だけ処理が走る(呼び出される)というノードです。
このノードは呼び出されるだけで、その後に何か繋がないと何も起きないので、次に文字を出力するノードを追加します。
「Print String」というノードを追加し、繋ぎます。
マテリアルエディタと同じく、三角形のピンをドラッグすることで線を伸ばすことができ、繋ぎます。
また、線の上で、alt + LMB で線を切ることができます。
こちらは、文字を出力するノードです。
「In String」に入力された文字が出力されます。
ちなみにこちらは、デバッグ用なので注意してください。
何かの値などを確認したい時などに使います。
exeなどにパッケージ化した時などには表示されません(パッケージ化の方法にもよる)
これでプレイ開始時に「Hello」と出力される処理ができました。
処理ができたら、左上の「Compile」 を押してます。
今作ったブループリントは、人間が理解できるように作ったプログラムです。
それを、コンピューターが理解できるように変換するのが「コンパイル」です。
プレイを押せば、勝手にコンパイルされますが、必ずコンパイルする必要があります。
ここでエラーなどが表示される場合もあるので、エラー文を読み、解決することもあります。
レベルエディタに戻って、プレイすると左上に「Hello」が表示されるはずです。
変数を使ってみる
プログラミングをする上で欠かせないものの1つが変数です。
変数は、数値や文字、アセットなどの情報を格納、保存しておける箱のようなものです。
変数に数値を入れたり、取り出したり、別の数値に上書きしたりして使います。
その変数の中身の情報のことを変数の値と言ったりします。
数値の他にスタティックメッシュやマテリアル、他のブループリントなどを格納できる変数を作ることもできます。
数値であったり、文字、メッシュであったり、中に入れるものの種類は、予め決めておく必要があります。
その種類を変数の型と言ったります。
最初は、中々イメージしづらいと思うので、実際にUE5で作りながら、見てみましょう。
My Blueprint のところで変数の作成やこのブループリント内の変数の一覧を見たりすることができます。
既に「BaseTurnRate」という名前で右に「Float」と書かれたものがあります。
これが変数です。
Floatというのは、先述した、変数の型です。
Float型 というのは、数値を格納するための型です。
特に「1.15 」など小数も扱えるものがFloatになります。
他にもInteger という数値を扱う型がありますが、こちらは小数は使えません。
UE5で扱える型の種類については、公式ドキュメントをご覧ください。
変数の作成
VARIABLESの+ボタンから新しく変数を作成することができます。
ここで名前を変更することもできますが、一旦、Enterなどを押して、決定します。
「NewVar_0」という名前の「Boolean」型の変数ができました。
変数の名前と型を変えたいと思います。
変数を選択した状態でDetailsタブで変更することができます。
Variable Name(名前)を「HP」、Variable Type(型)を「Float」にします。
下の方の「DEFAULT VALUE」が「Please compile the blueorint」になっているので、コンパイルします。
そうすると、デフォルトバリュー、初期値を入れることができます。
「100」という数値を入力します。
これで、「HP」という名前で「100」という数値が入っている変数ができました。
変数の中身を確認してみる
これを先ほどのPrint String で変数の中身を確認してみます。
My Blueprint の VARIABLESの一覧から、変数「HP」をEnvent GraphにD&Dします。
そうすると、「Get HP」と「Set HP」が表示されるので「Get HP」を選択します。
Get は、「その変数を取得する」というノードです。
なので、変数の中身を何かしらで使いたい時に使用します。
Get HP ノードのアウトプットを「In String」に繋ぎます。
そうすると、間に何かノードが追加されました。
これは、変数「HP」のアウトプットは「Float」なのに対して、In String のインプットは、文字を扱うための「String」という型になっています。
なので、型が違うので、そのまま繋ぐことはできます。
そこで、「FloatをStringに変換する」コンバートノードを使うことで、繋ぐことができるようになります。
このコンバートノードは基本的に、UE5が判断して、自動で追加してくれます。
もちろん、自分でノードを追加してもOKです。
「float to string」などで検索すると出てきます。
プレイすると、HPのデフォルトバリューで「100.0」という文字が出力されます。
Floatなので、「.0」が付きます。
計算式を使ってみる
最後にちょっとした計算をしてみます。
変数「HP」から、「50」を引いた結果を出力してみます。
まず、「Damega」という名前の「Float型」の変数を作成し、デフォルト値を「50」にします。
HPのアウトプットから何もないところにD&Dします。
そうすると、右クリックした時と同じようにノードのウィンドウが表示されます。
「-」で検索し「Subtract」(引き算)を追加し、以下の画像のように繋ぎます。
これで「HP(100)-Damage(50)」という処理ができました。
ちなみに、単純に何もないところで、tabキー、またはMLBを押したときの違いは、検索した時に出てくるノードの種類が、そのD&Dしてきたノードで使いそうなノードが検索に引っかかるようになります。
またノードを追加したときも自動で繋がります。
ちなみに目的のノードが検索で出てこない場合は、右上の「Context Sensitive」のチェックを外すと全てのノードから検索するようになります。
これでプレイすると「100-50」の結果(50.0)が表示されます。
Damageのデフォルト値を変えれば、結果も変わります。
変数の中身を変更する
先ほど、変数「HP」をD&Dで「Get HP」した時に、「Set HP」という表示もありました。
Set は、その変数の中身を上書き、変更するノードです。
直接、値を入力することもできますし、何らかの計算した結果(ノードのアウトプット)を入力することもできます。
以下の画像のように「Set HP」などを追加して、ノードを繋いでみます。
この処理は
①HP(100)の値を出力
②HP(100)-Damage(50)の計算結果をHPに上書きする
③再度、HP(50)の値を出力
という処理です。
これでプレイすると下から「100.0」「50.0」と出力されます(下が古い)
ブループリントでは、処理の上流(基本的に左側)から下流(基本的に右側)へ確実に処理が流れていきます。
①の時点では、HPの値は「100」
②では、100-50=「50」の値がHPに上書き
③で、②で上書きされたHPの値が出力
という流れです。
このようにゲームでもダメージを食らうとHPが減るというのがよくあるかと思いますが、変数「Damage」の値を随時、Setすることで、食らうダメージを変えると言ったことも可能です。
まとめ
今回は、ブループリントの基礎として、ブループリントエディタの見方や使い方、変数などについて紹介しました。
この記事で重要な部分は、ブループリントエディタの使い方と変数です。
変数は、値や文字などの情報を保存しておける入れ物で、型によって何を保存しておけるかが変わります。
今回、紹介した内容は本当に基礎部分で、これだけでは、ゲームを作ることはできませんが、こういった処理の組み合わせや積み重ねでゲームはできています。
また別の機会にもっと詳しい内容や実践的な内容を紹介できたらと思います。
最後までご覧頂きありがとうございました!
コメント