青果にまつわる情報誌 Kanemasa Magazine...発行日 2021年2月 2021. 5 青果にまつわる情報誌 Kanemasa Magazine
50分でわかるブループリントについて
-
Upload
masahiko-nakamura -
Category
Engineering
-
view
14.562 -
download
8
description
Transcript of 50分でわかるブループリントについて
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 作成をサポートするビヘイビアツリーとの連携機能
ご清聴いただき、ありがとうございまし
た!