16.ブループリント実践:レベルブループリント編
🌟ブループリントとは?
ブループリントはグラフを繋げて行うプログラミングの事です↓
https://scrapbox.io/files/65b093c08239c900233b7b80.jpg
ブループリントの特徴としては、簡単かつ実装が凄く速いです。
ゲームのほとんどの機能をこのブループリントで作る事ができます。
一般的なUnrealEngineの大規模ゲームの場合、ブループリントとC++両方が使用されてゲーム開発されている所が多いです。しかし、一方で小規模なゲーム開発の場合はブループリントのみでゲーム開発されている所が多い印象です。
🌟Step1:テキストを表示させる
「HelloWorld」という文字列を画面上にテキスト表示する機能をブループリントで作っていきます。
プログラミング系の基礎の基礎ともいえるテキスト表示機能をブループリントでも実践していきます。
①レベルブループリントを開く
まずはレベルブループリントというものを開きます。メインツールバーのプレイボタンの二つ左隣にあるボタンをクリックしてレベルブループリントを開きます。
https://scrapbox.io/files/65b0a666a31ac7002465d564.jpg
レベルブループリントとは?
レベルブループリントとはこのレベル限定で実行する何らかの機能を作る場所になります。
今レベルブループリントを開いたように「レベルブループリントを開く」という項目からレベルブループリントは開くという事を覚えておきましょう。
https://scrapbox.io/files/65b0a6fc3985310025a21ede.jpg
②タブの整理をする
ブループリントはレベルのタブの横にくっつけるとタブの切り替えがしやすくなります。
画像のように作成したブループリントは、エディタのメインレベルタブの横にドラッグで隣り合わせにしましょう。
https://scrapbox.io/files/65b0a7b642ed09002356bce0.gif
🌟ブループリントの操作方法の復習
table:操作方法
移動 右クリック+ドラッグ
拡大縮小 マウスホイール
ノードの追加 右クリック
ワイヤー(リンク)の作成 矢印をドラッグ
ワイヤー(リンク)の削除 Alt +左クリック
リルートノードを追加 ワイヤーをダブルクリック
コメント C
table:よく使うノード作成のショートカット
Delayノード D キー + マウス左クリック
Branchノード B キー + マウス左クリック
Sequenceノード S キー + マウス左クリック
③イベントグラフのなかにノードを追加する。
右クリックからブループリントを作成していきます。イベントグラフ内で右クリックして、一覧を表示します。この一覧の中から様々な機能を持ったグラフを追加する事ができます。
今回はイベント BeginPlayというノードを使用するので、検索欄に『beginplay』と入力します。
無事に赤いノードがイベントグラフ内に出現すれば完了です。
https://scrapbox.io/files/65b0a9b260585c00241b2314.gif
追加した「イベントBeginPlay」のノードの意味ですがこれはゲーム開始時にこのノードに繋げたノードを実行するためのノードです。
UnityでいうところのStart関数と同義です。
④テキストを表示するノードの追加
では続いてテキストを表示するためのノードを追加します。BeginPlayノードの矢印からドラッグして離します。ノード一覧が表示されるので「printstring」と検索してPrintStringをクリックして作成します。
https://scrapbox.io/files/65b0acb1b9a5f7002449bc4b.gif
PrintStringノードはテキストを表示するためのノードです。ノードの中の『InString』に入力されたテキストを(ビューポートの)画面左上に表示します。デフォルトだと「Hello」と書かれているので下画像のように画面左上にHelloと表示されるようになります。
Unityでいうところの『Debug.Log』や『print』と同義です。
⑤コンパイルを押してセーブ
完成したので左上のコンパイルをクリックします。このコンパイルの意味についてはページ下の方で解説します。
https://scrapbox.io/files/65b0b0804449e6002390c4dc.gif
⑥動作の確認
プレイボタンを押します。ゲーム開始時にビューポート左上に注目してください。
画面左上に「Hello」というテキストが表示されるようになっていればOKです。
https://scrapbox.io/files/65b0b159c93e030023622480.gif
https://scrapbox.io/files/65b0b14ebad13400242408a6.jpg
①BeginPlayはゲーム開始時に呼ばれるノードで、後続のノードを実行する効果があります。
②print StringでIn Stringの中に書かれたテキストを表示します。
二つを組み合わせると『ゲーム開始時にテキストを表示する』というプログラムになるわけです。
https://scrapbox.io/files/65b0b8d072c5040025d21d7a.jpg
🌟Step2:表示するテキスト内容を変更してみよう
『Hello』の文字を『HelloWorld』に変えてみましょう。
レベルブループリントを再度開きます。レベルブループリントを開くをクリックするか、タブから切り替えて開きましょう。どちらからでも開ければ良いです。
https://scrapbox.io/files/65b0b2c33985310025a384b1.jpg
コンパイル後、レベルエディタに戻ってプレイして「HelloWorld」とテキストが表示されるようになっていればOKです。
https://scrapbox.io/files/65b0b3a84694970024083899.png
🌟コンパイルについて
コンパイルとは作ったノードをゲームで実行できるように実行形式のデータに変換する事です。
ノードを追加,削除,編集した後にはこのコンパイルを行う必要があります。
基本的にはノードを編集し終えたらコンパイルすると覚えておきましょう!
table:コンパイルボタンの状態
黄色の状態 コンパイルが完了していない状態
緑の状態 作ったノードに問題が無いコンパイル完了状態
赤の状態 ノードが正しく組み立てられていない状態
https://scrapbox.io/files/65b0b532aa5d1c002437f3d2.gif
赤だった場合、エラーの原因となっているノードを修正する必要があります。
イベントについて
ノードは種類毎に色で分けられています。
赤色のノードはイベントと呼ばれて、イベントはノードを実行するタイミングを決めるものです。
青色のノードは関数と呼ばれるもので簡単に言うと何らかの処理を行う機能を持ったノードになります。
今回で言えばBegin Playがイベントノード、print stringが関数となります。
🌟Step3:毎フレーム呼ばれるテキストを表示する
フレームとは映像を構成する一枚の画像の事です。映像は一秒間に何枚もの画像を写し出しています。その画像一枚一枚の事をフレームと呼びます。また一秒間にフレームが何枚あるかの単位をFPS(Flame Per Second)、またはフレームレートと言います。
FPSが60とすると、一秒間に60回のフレームがあることになります。
ビューポートオプションの『FPSを表示』でFPSを確認することもできます。
https://scrapbox.io/files/65b0b99f68b72f0023da3aa7.jpg
①不要なノードを削除
前回のプロジェクトを引き継いで、レベルブループリントにノードがある場合は削除して何も無い状態にしておきましょう。
ドラッグして範囲選択した後、DeleteまたはBacspaceキーでノードを削除しておきます。
https://scrapbox.io/files/65b0b78cac5d3400234a0268.gif
②Tickノードを使用する
次に何も無い場所で右クリック > tickと検索します > イベントtickをクリックします。
イベントtickノードは,、繋げたノードをゲーム中、マイフレーム常に実行するためのノードです。
https://scrapbox.io/files/65b0b801d30a3100241b1e88.gif
③テキストを表示する関数をつなぐ
イベントTickの矢印からドラッグ&ドロップして、PrintString(テキストを表示するノード)を作成します。
https://scrapbox.io/files/65b0b83cac5d3400234a18ea.gif
🌟ノードの名称について
ノードの白い矢印は実行ピンと言って、実行ピンを繋ぐ線を実行ワイヤーと言います。
https://scrapbox.io/files/65b0b8a7680a0b0024875d8c.jpg
Tickノードは毎フレーム,ノードを実行します。例えばfpsが120だった場合、フレームは120枚なので毎フレーム実行されるTickノードも一秒間に120回実行されます。つまり、今回Tickノードに繋いだ「PrtintString」ノードは1秒間に120回実行されるという事になります。
https://scrapbox.io/files/65b0b9fcef605c002377eac6.jpg
https://scrapbox.io/files/65b0ba116d3e28002443ff71.jpg
このピンを使用すると、異なるマシンや環境で実行される場合でも、一定の速度で動作するようにフレームレートに依存しない処理を行うことができます。
具体的には、例えば物体の移動、アニメーションの更新、ゲームのロジックの進行など、フレームごとに行う必要のある処理を実装する際に、「Delta Seconds」を使用して時間経過を考慮した計算を行うことが一般的です。
🌟Step4:レベルブループリントでゲームを終了させるシステムをつくる
ゲーム開始後数秒後にゲームを自動で終了する処理を作成する
↓の画像のように、ゲーム起動後、数秒後に自動で停止ボタンが押されるようにします
https://scrapbox.io/files/65b0c2df40ace0002356222b.gif
①レベルブループリントを開き、Event Begin Playノードを追加。
今回はゲーム開始直後の処理であるため、イベント『BeginPlay』を使用します。
https://scrapbox.io/files/65b0c32e40ace000235628fc.jpg
https://scrapbox.io/files/65b0a9b260585c00241b2314.gif
②Delayノードを追加
イベントBeginPlayノードからピン(矢印)をドラッグして、「Delay」ノードを作成します。
https://scrapbox.io/files/65b0c3dcbad134002426280c.gif
③DelayのなかにあるDurationと書かれた入力値に2と入力します。
https://scrapbox.io/files/65b0c58cf17c0400223be274.jpg
Delayノードとは?
Delayノードとは指定の秒数処理を遅らせるためのノードです。今回、Durationに「2」と入力した事で2秒処理を遅らせる事ができます。なのでゲーム開始時から2秒遅らせる処理を今作った訳になります。例えばキャラクターを操作開始するまでの待ち時間などに使用したりします。
※UnityでいうところのCoroutineやInvokeと同義。
④次にDelayノードからドラッグして、QuitGameノードを検索して作成します。
https://scrapbox.io/files/65b0c5ca80a1d00024f1dc59.jpg
QuitGameノードとは?
QuitGameノードとはゲームを終了させるノードです。例えばゲームを終了させるボタンを実装した時にこのノードを使用したりします。
⑤コンパイルして、プレイボタンを押した後に、2秒後のゲームが停止するか試してみましょう。
https://scrapbox.io/files/65b509f4a8a06400240a82a2.jpg
🌟まとめ
BeginPlayはゲームプレイ開始時に処理を実行する、Tickノードはゲームプレイ中常に(毎フレーム)実行するというノードになります。これらはイベントノードと呼ばれてゲーム中のどのタイミングで処理を実行するか決めるものになります。まずは基本的なイベントノードにはBeginPlayとTickノードがあると覚えておきましょう!
https://scrapbox.io/files/65b0bb1872c5040025d25c02.jpg