27.2K Views
May 12, 22
スライド概要
第2回関西UE4勉強会で発表したスライド内容です。
ブループリントを中心に解説しています。
50分でわかる ブループリントについて 第2回 関西 UE4勉強会
自己紹介 • HNはalwei • Twitter @aizen76 • 最近アンリアルフェスで喋りました • 関西方面のUEの人 • 元ゲームプログラマー • 今は割りとなんでも屋 • ちょっとイラスト描くのにハマり気味 アンリアルフェスではこんなゲームを作った( ´ ▽ ` )
ブループリントって? • Unreal Engine4で搭載されたビジュアル スクリプティング システム • 今までプログラマーが専任していた部分をゲームデザイナーやアーティストといった人で も扱えるように直感的にロジックが制御できるようになったシステム • もちろんこの仕組み自体がスクリプトのようなものなので、プログラマー自身も恩恵を 受けることができます。 • 何よりもスクリプティング、デバッキング、トライ&エラーといった仕組みが全てエディター 上でグラフィカルに行なえるというのが大きい。
これがブループリント
ブループリント環境 • ブループリントは完全なノードベース ビジュアルスクリプト環境。 • ほとんどあらゆるゲームロジックを作成することができます。 • 誤解を恐れずに言えばビジュアルスクリプトはテキストベースのスクリプトよりも強力な ところがあります。 • 強力なリアルタイムプロパティ編集、ビジュアルデバッガーの存在も、とても大きい。 • ビジュアルゆえに可能な機能も沢山。コードだけじゃ実装できないこともできます。 • 逆に文字列のような処理はちょっと苦手。
強力なリアルタイムビジュアルデバッガー • ロジックの流れが簡単にわかる。 • ブレークポイントを設置して、ステップ実 行も可能。 • 変数はもちろんウォッチ可能。 • 特定のアクターにアサインして、動きを 見張ることもできます。
ブループリントはテキストでコピペ可能!? ノードを選択してコピー メモ帳にペースト!?
バージョンコントロールで差分比較 • バージョンコントロールを使えばブループ リントの差分比較もできます。 • 現状ではSubversionとPerforceに 標準で対応。 • GitやMercurialは非公式プラグイン で作っている方がいます。
ブループリントを使うと… • 今までプログラミング経験がなかった人 でもゲームのロジックが作れます。 • Tappy Chickenというゲームは実際 にプログラミング経験が全くないアーティ ストさんがひとりで作成したゲーム。 • もちろん、何も勉強せずに作ったという わけではありません。
ブループリントを扱うには… • ゲーム構築するロジック能力が必要。 • 基本的なフローチャートが組める程度 な人ならそれで十分です。 • 3Dゲームでは簡単な数学の知識は 必要。 • とは言っても中学、高校程度の線形 代数学がわかれば大丈夫。 • ブループリント自体はオブジェクト指向 言語の考え方に近い。 イベント 発生 移動位置 確認 移動開始 移動速度 計算 次の処理
ブループリントよくある勘違い 「ビジュアルスクリプトって言っても実は対したことできないんでしょ?」 → いえ、ほとんどの場合ブループリントだけでも十分にゲームが作れます。 「複雑な計算式とかビジュアルでやるの面倒でしょ?」 → 計算式を簡単に組める専用のノードがあります。 「どうせ最後はコードばっかり書くことになるんじゃないの」 → UE4は全てのシステムの根幹にブループリントがあるので、それは難しいです。
さらに言うとブループリントって実は… • ビジュアルスクリプト部分だけがブループリントじゃないんです。 • ビジュアルスクリプト = ブループリント は大きな間違い • ややこしい?いいえ、そんなこともありません。 • ゲームプレイに関するあらゆるものはブループリントに繋がる。
柔軟なカスタマイズが可能なプレハブ • Unityでも使われている仕組み。 • コンストラクションスクリプトと呼ばれるアクター生成時に呼ばれる専用ノードグラフを使 うことによって、見た目や動作をガラっと変えることも可能。 • Unityとは違い、ブループリントはそれ自体がプレハブのようなもの。 • プレハブ機能のために何かする必要はなく、ブループリントを作成してしまえばそのまま 使用することができます。
階層構造付きコンポーネントシステム • 親子関係を持つことができる、階層構 造のコンポーネントシステム • ひとつのブループリントの中には様々な コンポーネントをくっ付けることが可能で 自由なカスタマイズができます。 • 更にブループリントのコンポーネントとし て別のブループリントをくっ付けることも できます。 • コンポーネントをカスタマイズすることに よって、あらゆるブループリントが作成 可能。
他にも色々な使い方 • ゲームプレイ用のキャラクターに必要な要素を全てまとめる。 • カメラ、入力、アニメーション、イベント、メッシュ、マテリアル、コリジョン、AI、サウンド、 エフェクトなどなど、あらゆるものがブループリントで扱えます。 • データだけを格納して、プロパティやコンポーネントだけを利用して、ノードグラフのビ ジュアルスクリプトは使わないといった単なるデータアセットという使い方もあります。 • ブループリント化してしまえば、他のプロジェクトとも使い回しが可能!
ブループリントの種類 大きく分けるとまずは以下のふたつ。 ■ レベルブループリント → レベル自体にひとつしか存在しないブループリント。レベル上に配置しているアクター を操作したい場合などに使用します。 ■ クラスブループリント → 通常作成するブループリントはこちら。必ずクラスを継承させて使います。レベルに依 存するものではなく、単体での動作を前提としています。
クラスブループリントの3つモード クラスブループリントを開いた状態では3つのモードが存在します。 ■ デフォルトモード → ブループリントのアクターが持つ初期パラメーターを決めるモード ■ コンポーネントモード → ブループリントのアクターに対してコンポーネントを設定するモード ■ グラフモード → ビジュアルスクリプトの編集を行なうモード
イベントハンドリング • ブループリントでロジックを制御する場 合、まずはイベントノードを作成してイ ベントの開始点を決めます。 • イベントノードをハンドリングすることに よってロジック制御することができます。 • イベントノードは全て赤いノード。 • アクター生成、更新、入力、コリジョン ヒット、ダメージ、ポーズなどなど実に 様々なイベントあり。
変数 • 数値などの値を格納しておく器。 • ベクトルや文字列など、計算した様々 な値の格納が可能。 Boolean → 真偽値 Byte → 1バイト整数 Integer → 4バイト整数 Float → 浮動小数 String → 文字列 Vector → ベクトル などなど…
配列 • 変数の配列。 • 配列というのは変数を複数個扱いにし て、ひとつの変数のように扱うことができ るようになる仕組み。 • ブループリントでは配列を扱うための専 用のマクロや機能などが沢山あり。 • 同じ変数タイプを大量に扱いたい場合 は配列化しておくと便利。
フロー制御 • いわゆるif文などの分岐制御。 • Loop文やSwitch文も当然あり。 • 配列に対してはForEachも。 • Loopを強制終了させるBreakも。 • ブループリント特有の制御文あり。 • Sequence、FlipFlop、DoN、Gate など地味に便利な制御文。
関数 • 一通りのロジックを機能化して、外部 へと公開する仕組み。 • ローカル変数も使えます。 • 入力値をいくらでも追加可能。 • なんと出力値もいくらでも追加可能。 • 純粋関数に設定すると関数内で値の 変更ができなくなり、白ピンがなくなり、 データを取得するだけの関数に。 • 関数ライブラリーにすると、どこからでも 呼び出せる関数に!
マクロ • 基本的なところは関数と同じ。 • 目的が少し違い、マクロは既存のブ ループリントに対する機能追加。 • 必ず親クラスを継承するので、関数と 違いターゲットを必要としない。 • 関数と違い、実行ピンをいくつでも返す ことができる。条件によって出力の分岐 が可能。 • マクロライブラリーにすれば、どこからでも 使うことができるのも関数と同じ。
イベントディスパッチャー • ブループリント間の通信として使うと非 常に便利な仕組み。 • レベルBPだろうがクラスBPだろうが、送 信元が誰かさえわかっていれば一方的 にイベントを発生させる。 • イベントのバインドとアンバインドは自由 に行なうことができ、ブループリントごと に同じイベントでも別ロジックとして動か すことが可能。 • Unityで言うとSendMessageが一 番イメージに近い。
タイムライン • 自由にカーブを定義し、更新時間ごと にカーブの値を返してくれるノード。 • 一度Playするとタイムラインノードに到 達した時点でロジックの処理は止まり、 毎フレームごとの更新値を返すようにな り、終了時まで継続。 • Float、Vector、イベント、Color、な ど様々な数値を返してくれる。 • ループにチェックすると永遠とタイムライ ンが更新値を返してくれるように。
Math Expression(数学式) • 数式を入力して、自動的に計算式 ノードを作ってくれる特殊なノード • 数学系の関数やベクトルなどの計算も 入力すれば認識する。 • 一般的な演算子には対応。 • 存在する変数であれば、計算式の中 に書くことが可能。 • 少しでも複雑になりそうと思ったら、すぐ に使った方がいいくらいに便利。
ブループリント インターフェース • オブジェクト指向言語でよく使われる仕組み。 • ブループリントでも既存のクラスに継承させて使うところは同じで、関数の宣言のみを 行ない、実装は継承クラス側で行なう。変数は作成不可能 • オブジェクト指向のカプセル化とポリモーフィズムの仕組みを実現させる。 • カプセル化により、ブループリント間の依存が減り、無駄なコンパイルが減る。 • ポリモーフィズムにより、同じ管理アクターに別々の動作を行なわせたり。 • ブループリントでは、なんとインターフェースを継承していないクラスがインターフェース関 数を呼び出しても何も起きないし、エラーにもならない。
アニメーションブループリント • アニメーション専用に用意されたブルー プリントで、既存のブループリントとは扱 いそのものが違う。 • イベントグラフは他のブループリントと同 じだが、アニメグラフではステートマシン の仕組みを使用することが可能。 • イベントグラフとアニメグラフはそれぞれ の連携が可能となっており、ステート遷 移をイベントとして発生させたりといった ことが可能。
まだまだ便利な機能はいろいろあります • ノードを囲ってグループ化してメッセージを添えることができるコメント機能 • 選択したノードを折り畳んでひとつのノードにまとめる機能 • 時間を置いてから後で再度実行が始まるDelayノード • ブループリントの線の流れをひとつにまとめるRerouteノード • 自由な変数を組み込んで使えるカスタム構造体機能 • 自由な定義を追加して使えるカスタム列挙体機能 • AI作成をサポートするビヘイビアツリーとの連携機能
ご清聴いただき、 ありがとうございました!