前回解説した「猫でも分かるUE4を使ったゲーム開発」シリーズの#02初めての[BluePrint]編です
今回も序盤に「プロの質問お断り!」と大々的に警告がされています
前回#01ではインストールからレベルエディタの基本操作まででしたが、今回はBluePrintとは?~非常に簡単なゲーム制作(床から床へ移動するゲーム)までが範囲となっています
初心者がいきなりブループリントから入っても、何が分からないのか分からず、UnrealEngineの操作が苦痛になります
#01と併せて受講すると、簡単なゲームが作れてしまう!
こちらのチュートリアルはヒストリア社提供の夏休みの宿題の4番手として紹介されています
#01に引き続き
本チュートリアルのUEバージョン:UE4,25,4
「猫でも分かる#02」で学ぶ事
議題は「ブループリントとは?」
- ブループリントとは?
- ブループリントエディタの説明
- Mesh同士の親子付
- ブループリントの設定をレベルエディタで追加変更
- ブループリントの学習ポイント
- ブループリントを使った簡単なゲーム3種
- ブループリントのイベントグラフの整理術
- ブループリントの時間表記
「猫でも分かる#02」メモ
ブループリントとは?
ビジュアルスクリプティングシステムの略
エンジニアがいなくてもプログラミングを作れるためにできた機能
従来のゲーム制作の工程ではエンジニアさんに負担がかかりすぎていたため、プログラミングの知識がないアーティストさんも扱える事を目的とした機能
ブループリントはAIではない
AI機能としてはビヘイビアツリー機能が存在する(今回はビヘイビアツリー機能については省略)
ブループリントエディタ
ビューポートに表示されているアクタ・メッシュの一覧が表示されている
コンポーネント
ビューポートに表示されているアクタ・メッシュに設定を追加する事ができる
① | CharactorMovement | キャラの動きにまつわるもの全てを制御 動きの速度を決める | 動きの速度を決める |
② | CameraBoom | 大元は[SpringArm] カメラワークの遅延を設定することが出来る | [CameraBoom]選択⇒[詳細]⇒ ラグ [EnableCameraLag]✔ [CameraLagSpeed]1.0 |
③ | [+コンポーネントを追加] | Meshを追加できる | [詳細]スタティックメッシュより変更可能 |
Mesh同士の親子付
ブループリントに表示されたアクタにMeshを追加する([+コンポーネントを追加]より)ことが出来る
- [コンポーネントパネル]上で、追従させたい(子)のMeshを、追従元のMesh(親)の上にD&D
ただし、単に親子付しただけだと(特にサードパーソンに追加)、動きがズレてうまくリンクできない場合がある
コンポーネントパネルより
- 子のMesh選択⇒[詳細]親ソケットで親付させたい部位を設定(今回はhead)
- トランスフォーム値を右端[◂◂]アイコンでリセット
下記ツイッター投稿でムービーで説明しています
親子付の概念は様々な事に応用できる
ex)ヘッドライト・盾
ブループリントの設定をレベルエディタで追加変更
ブループリントを[詳細]パネルで設定
コンポーネントパネルはレベルエディタ上([詳細]パネル)で細かく設定ができる
↓下記コマンドで、ブループリントの設定を追加変更する形で、プレイイン中も[詳細]の数値を変更&プレビューできる
プレイイン⇒F8(インジェクト)⇒[詳細]PC&当該のコンポーネント選択⇒任意のパラメータ変更⇒コマンド[k]
ただしブループリントでは数値は変更されていない
ブループリントを[コンポーネント]パネルで設定
レベルエディタで編集した数値を複製したアクタに適用したい場合
[詳細]⇒+追加右隣アイコン[このアクタのブループリントを編集]⇒インスタンス変更をブループリントに適用
大元のブループリントを編集すると大元のブループリントのの値が優先され、レベルエディタ上の数値は無効になる
ブループリントの学習ポイント
- どんなタイミングで
- どんな処理を
- どんな順番で実行するか
小学生向けのプログラミングソフト「スクラッチ」と同じ考え方
ex)PCをJumpさせる
- ジャンプボタンが押されたらジャンプを実行する
- ジャンプボタンが離れたらジャンプが止まる
これらの動きをブループリントのノードで作成すると?
- インプットアクションJump⇒Jump(空きスペース右クリック⇒[Jump]検索するとヒット)
- インプットアクションJump⇒StopJump
- グラフ右クリックで候補に挙がったメニューはどれを選択しても可能
- ノードを切断(ピンをAlt+クリック)すると機能しなくなる(ジャンプしなくなる)
- 切断されたノードをグラフに残したままでも影響なし
ブループリントを使った簡単なゲーム~準備~
レベルはメニュー[ファイル]から作成する
コンテンツブラウザ⇒右クリックから作成したレベルは、テンプレートが選べず、真っ暗(まっさら)な状態で作成されてしまう
[アウトライナ]⇒[Player Start]選択(※床の上に配置)した状態でプレイインするとサードパーティが現れる
プレイインを押してもサードパーソンが表示されない場合
[ワールドセッティング]タブ⇒ゲームモードオーバーライド⇒[ThirdPersonGameMode]に設定
復習:床を複製配置するには?
ブループリントを使った簡単なゲーム①
床と床の間に回転する板を配置する
ブループリントを新規作成
コンテンツブラウザ[EGJ]⇒[+追加]ブループリント⇒親クラス[Actor]※今回の場合
・決定的な違いはAI機能を付与できるか
・pawnの方が使用可能なノードが多い
AI:Actor自体が何かを考え決定&実行する機能
今回は単純な回転する棒なので Actorで十分
BPデータの命名規則 絶対的な決まりはないが、冒頭に何のデータかわかり、検索にもヒットしやすくなる命名規則を推奨
例:ブループリント BP_xxxxxxx スケルタルメッシュ SK_xxxxxxx
- 作成したBPエディタをWクリックで開く
- ビューポート上に板を作成⇒[+追加]キューブ
- レベルエディタに戻って、BPデータをビューポートにD&D ※BPエディタをずらすと隠れていたレベルエディタが出てくる
回転方法はいくつかあるが今回は[イベントTick]ノードを使用
下記デフォルトで用意されているノード
ノード名 | 効果 |
---|---|
BiginPlay | プレイイン開始直後のアクション |
ActorBeginOverlap | アクタとメッシュが重なったら何かが起こる ex)PCがコインを取る |
イベントTick | 常にアクションしている |
[AddActorWorldRotation]ノードを作成⇒接続⇒ DeltaRotationの数値 (仮に)Z10
[GetActorRotation]&[SetActorRotation]をセットする
Get:データを読む
Set:データを書く
[GetActorRotation]と[SetActorRotation]の間に[CombineRotators]ノードを設置⇒ [CombineRotators]ノードの回転数を調整
床を選択⇒[詳細]⇒[+追加]⇒[RotatingMovement]選択
※トランスフォーム[ムーバブル]選択
設定後、[このアクタのブループリントを編集]でスクリプトを追加できる
ブループリントを使った簡単なゲーム②
床と床の間を移動する板を配置する
- ゲーム①で作成した板のブループリントを複製&リネーム
- ざっと床同士の空間のサイズを測る
[詳細]トランスフォームY値より算出(今回1700-400=1300)
複製したブループリントエディタを編集
[イベントTick]⇒[AddWorldOffset]ノード接続
※[DeltaLocation]に速度を入力
プロパティ(変数)作成:[AddWorldOffset]ノードの [DeltaLocation]から[変数へ昇格]選択
上記作成した変数は[マイブループリント]パネルに作られる (わかりやすくリネーム(F2)しておく)
※今回は[speed]と命名
リネームする時は日本語や記号厳禁
変数名は半角英数字!
日本語や記号は誤作動の原因となる
変数の閉じ目のアイコンを👁をON&コンパイルすると、レベルエディタ上でプロパティ表示される
[GetLocationActor]ノード作成
今回はYを読む
[GetLocationActor]の出力ピン右クリック⇒構造体ピンを分割 ブランチノードを作成 ※ifでヒット
今回はYが1700を超えたら成功・以下なら失敗
- [Float>Float]ノード設置※[>]検索でヒット
- [PrintString]ノードに繋げて、正誤判定がデバック文字で分かるように設定
レベルエディタ[詳細]での編集とブループリントでの編集は、どちらが優先されるかは時と場合によるので、[PrintString]で都度試作しながら進める
デフォルトはcm
エディタの環境設定で変更可能⇒レベルエディタ-ビューポート
- ゴール地点についたら速度を[-]に設定
- step2で作成したマイブループリント[speed]をグラフにD&D
- [Set]で配置 [セット]Y-1入力 コンパイル&保存
- スタート位置を新規でセットする
・イベントBeginPlay
・GetActorLocation
・変数へ昇格(分かりやすいようリネームする) - 既存の[GetActorLocation]に①で作成した変数を接続
・変数は[GET]で配置
・ピン右クリック[構造体を分割] - 変数と[>]の間に[+]ノード追加 ゴール位置-スタート位置の数値入力
※戻りのノードには変更なし
- [GetActorLocation]~を複製し、ブランチの[False]から複製&接続
- 今度は[<]ノードを使う
- [<]に入力する数値はスタート位置
- [セット]に入力する数値は整数
ブループリントを使った簡単なゲーム③
床と床の間を板が回転しながら移動する
往復する板(複製&リネーム)に、レベルエディタ[詳細]⇒[+追加]⇒[RotatingMovement]⇒トランスフォーム値の回転数値を調整
ブループリントのイベントグラフの整理術
UnrealEngineのデータの命名規則は原則英語。英語以外の言語はトラブルになる
補足コメント機能 | 効果 | やり方 |
---|---|---|
①ツールヒント | 変数にカーソルを合わせるとコメントが表示 | データ名選択⇒[詳細] |
②コメント | ブループリントで組んだノードにコメントを表示 | ノード群をドラックで囲む+[C] |
③ノードコメント | ノードにコメントを表示 | ブループリント左上💭クリック |
BPノード選択⇒[Q] | ノードを整列 |
[Sequence]ノード | 横に長くなりすぎて途中で切断したノードをつなぎ直す |
[ノードを降りたたたむ] | 煩雑になったノードを選択&右クリック[ノードを降りたたたむ]でコンパクトに 更に畳んだノードにコメント補足するとあとから見やすいデータに |
ブループリントの時間表記
① | Now | 現在の時間取得 |
② | GetMillisecond | ・秒数取得 ・①②を[BeginPlay]に繋げて経過時間表記 |
③ | Delay | 秒後に開始 |
④ | イベント[Tick]DeltaSeconds | Tickを呼ぶ間隔 |
他にもいろいろあります
まとめ:受講し終えたら更に深堀したくなる UnrealEngineの機能は怖くない
ヒストリア社提供の夏休みの宿題①②を終えて、「猫でも分かる」チュートリアルが③です
急にボリューミーになりましたが、ヒストリア社提供の夏休みの宿題①②を終えたビギナーであれば興味をそそられる説明ばかりです
もっと深堀したくなる?
コツコツ進めて、ヒストリア社提供の夏休みの宿題すべて終えるころには、ムキムキのUnrealEngine使いになっていたいですね👍
コメント