5K Views
May 12, 22
スライド概要
Unreal Fes Osaka 2015で発表したスライドです。
Powerful of Blueprint Visual Scripting 知られざるブループリントについて Unreal Fes 2015 Osaka フリーランスゲームクリエイター コミュニティサポーター 中村 匡彦
自己紹介 名前 : 中村 匡彦 Twitterだと @aizen76 元々はゲームプログラマー(3DアクションゲームやMMO作ってた) 去年のアンリアルフェスでも喋らさせていただきました。 普段はフリーでゲームを作るお仕事をしたり、ゲームの作り方を教えたり。 Unreal Engine歴は実はまだ1年だけ。
ところで皆さん。 ブループリントどうですか?
実際のところ 色々な意見があると思いますが…
今回はブループリントと ビジュアルスクリプティングの良いところを 実演を混じえて紹介していきたいと思います!
ショートカットについて
かなりのショートカットがあります Blueprint Editor Cheat Sheet ※公式です https://docs.unrealengine.com/latest/attachments/Engine/Blueprints/UserGuide/ CheatSheet/BlueprintCheatSheet-1989117414.pdf
ショートカットを覚えるのはツールの基本 • どれだけ使い勝手のいいツールでも、ショートカットを覚えないと 使いにくいのは当たり前 • 煩わしいと思った操作ほど楽に操作出来るかも? • チートシートを印刷してモニターの近くに貼るのはいいかも。
コメント機能
ただのコメントではない! • UE4のコメント機能はコメントだ けの使いみちではなくて、ノードを 整理する機能として使えます。 • グルーピング化、カラー変更、 ズームアウトしても読めるバブルコ メントなどなど。 • コメント内コメントも可能。ちゃん と深度設定も出来ます。
再ルートノード
ノードの線を再度ルーティングする時に • ノードピンの線を固定出来る仕 組み。複数のピンの線をひとつに まとめることも。 • 沢山のケーブルを束ねる結束バ ンドのイメージ。線が複雑になっ てきたらこれで綺麗にしましょう。
ノードの折り畳み
複雑なノードでも一発で折り畳めます BEFORE AFTER
関数化、マクロ化も一発 関数へ折り畳む マクロへ折り畳む
定期的にノードを整理しましょう • ソースコードなどと同じようにノードも整理しないとスパゲッティになります。 • 見た目で言えばソースコードよりもノードは酷いか一発でわかってしまうの で、後で見た人が苦労しないようなノード作成を心掛けましょう。 • ブループリントにはここまで紹介した機能だけでも十分にノードを整理出 来る機能が備わっているはずです。
基本フロー制御ノード
覚えると非常に便利な基本フロー制御ノード • 分岐を行なうBranchノードや ループをするForEachLoopノー ドも基本制御ノードです。 • 内部的にはマクロを用いて実装 されています。 • 地味だけど便利な縁の下の力持 ちタイプなナイスガイ • 今回はBranchやLoopと Switch以外を紹介します。
Sequence • 上から順番にシーケンスな流れと してノードを実行してくれるノード。 • シンプルで分かりやすいですが、 ノードの見た目を整理するのに 必須なノード。 • Sequenceなしでノードを作って いると、横にとても長くなってスパ ゲッティになりがち。 1 2 3
DoN & DoOnce • N回実行するか、もしくは一度だ けフローを実行してくれるノード。 • フラグや変数を用いなくても回数 制限をかけたい時に便利。 • 一度Resetを実行すれば再度 同じ条件で実行してくれます。 • DoOnceはResetかけるまで実 行しないという使い方も可能。
FlipFlop • FlipFlop回路と聞けばわかる人 も結構いるはず。 • ノードが実行されるたびにルート が切り替わり、AとBが交互に実 行されます。 • 何かに入った時と出た時で交互 に違う処理をさせたい時にとても 便利!
Gate • その名前の通り、ゲートが開いて いる時にのみ処理するノード。 • Enterピンを通っている間に Openピンが処理されるとその間 に処理が走ります。 • Closeさせると処理が止まる。 Toggleの場合は交互に入れ替 わります。
MultiGate • 名前こそGateとついているが、さ きほどとは別物のノード。 • ノードが実行される度にOutピン の上から順番に実行されます。 • Resetをかけると実行ピンが最 初からになり、Is Randomでラ ンダムに実行されます。Loopも チェックするとループします。
Delay & Retriggerable Delay • 指定した秒数まで一度停止して からその後に実行してくれるノード。 • 一度ノードの実行が完全に止 まったように見えますが、ちゃんと 実行してくれます。 • Retriggerable Delayは再度 実行した場合、時間をリセットし てから実行してくれます。
タイムラインノード
Timeline & カーブエディター タイムラインノード カーブエディター
これぞビジュアルスクリプトの真骨頂! • Timelineノードはこれぞまさしく ビジュアルスクリプティングだからこ そ出来るモノ。 • カーブエディターと合わせてリアル タイムに動きを作成する事が出 来ます。 • Float,Vector,Color以外に Eventトラックも作成出来ます。 自動再生、ループなども簡単。 動く床やオブジェクトがすぐ作れる!
ブループリントのデバッグ
ブループリントのデバッグ ブレークポイントとウォッチ ブループリント用デバッガー
ブループリントデバッグのデモ動画
ブループリントの差分とマージ
ブループリントの差分確認
差分確認のデモ動画
ブループリントのマージ(3Way方式)
マージのデモ動画
ちなみにブループリントはテキストでコピペも可能 ノードを選択してコピー メモ帳にペースト
ビジュアルスクリプトだけど コードを扱うのと変わらない配慮
コンストラクションスクリプト
コンストラクションスクリプトとは? • オブジェクトが生成されるタイ ミングで実行されるグラフ。 • ゲームを再生していなくても 実行される唯一の存在。 • レベル内でアクター毎に違う 挙動を設定する事が出来る。
ゲームを再生していなくても実行する 装備品のアタッチをする 各種エディター内でも反映!
ダイナミックマテリアルインスタンス コンストラクションスクリプト で設定しておくと… ゲームを実行する前に動的に マテリアルを変更できるようになる!
見た目の調整だけでゲームを 実行したくないという場合もある
本来ゲームを実行しないと 確認出来ないものも確認が可能!
数学式
数学式(Math Expression) • ノードだけで複雑な式を組み 立てるのはとても大変。 • そこで登場したのがテキスト から数学式を自動で生成す るノード。 • かなり複雑な数式でも書け る。超便利なのでどんどん使 いましょう!
ベクトル、変数、数学関数などを自動的に認識!
複雑な論理演算もOK!
少しでも面倒な式は 数学式ノードに書きましょう!
乱数
乱数(ランダムストリーム) • 通常の乱数と基本的には同 じ。IntやFloatやVectorな ど沢山の乱数がとれる。 • ランダムストリームの初期シー ド値を固定すれば何度やっ ても同じ結果に。 • 使うだけならとても簡単!
バウンディングボックス内のVectorをランダムに! コンストラクションスクリプトで… ボックス内に毎回ランダムで配置
変数のスライダーとクランプ
変数のスライダーとクランプ • 一部の変数はエディター上で スライダー操作が出来るよう になっています。 • 変数を公開すれば自動的に スライダーになります。 • スライダー操作はリアルタイム の変化を確認出来て、とて も便利です!
スライダー範囲を設定と値の上限下限値でクランプ マウスでグリグリと横にスライド 変な値が入っても自動クランプ
Vectorの3Dウィジェット
Vector変数はビューポート上に表示出来る ベクトルの変数でチェックする 3Dウィジェットが表示される!
構造体
構造体について • ユーザー定義の構造体を作 成すると、自動的に3個の ノードが生成されます。 • Break系とMake系とSet members in系ノード。 • これらのノードを使って構造 体の操作を行ないます。
不要な構造体メンバーは隠す事が可能 詳細からチェックを外す チェックされているメンバーのみに
更にこんな機能も…
直接構造体ピンからメンバーを操作も可能! ノードの分割というのが可能 メンバーが出現!
ぶっちゃけ、こちらの方が便利! ノード作らなくていいし…
好きな方を使いましょう! ケースバイケースという事で…
マクロの活用法
マクロって関数と比べてどうなの? • 関数があるのになぜマクロが 必要なのか? • マクロを使うタイミングがよくわ からない… • ぶっちゃけ全部関数でいいの では?
徹底比較!関数 VS マクロ 関数 マクロ • 基本的にターゲット(誰に対して 行なうか)を必要とする。 • 親クラスを指定するので、ターゲッ ト指定が必要ない。 • 必ず実行前にコンパイルをする 必要がある。 • 実はインライン展開されるので、 コンパイルが必要ない。 • 純粋関数でない限り、実行線は 必ず入出力ともひとつずつのみ。 • 実行線を入出力共にいくらでも 持たせる事が可能。 • Latentノード使用不可。 • Latentノード使用可能。
わかりやすいマクロの有効活用例(CompareInt)
そもそも使用目的が違う • 関数は外部に機能を公開するために使用する。 • マクロは継承されたクラス内でのユーティリティとして使う。 • 関数は10台の車を生産するのにひとつの工場で作る。 • マクロは10台の車を10の工場で1台ずつ作る。 • 最終的にインライン化されるマクロの方が効率的になる。
AnswerHubで、とても詳しい解説がありました https://answers.unrealengi ne.com/questions/30834/ whats-the-differencebetween-blueprint-macrosand.html
マクロの方が制限が少なく、 ビジュアルスクリプトの恩恵が強い!
用法用量を守って、 正しくマクロをお使いください
キャスト VS インターフェース
キャスト便利過ぎー!問題 • キャストは手軽に別のブルー プリントの情報が参照出来 て便利。 • 便利過ぎて多用し過ぎてま せんか? • キャストは便利ですが、それ なりに諸刃の剣です。
キャストの問題点 • キャストは失敗してしまう可能性があり、エラーハンドリングミスによっては ゲームが正しく実行されない可能性がある。 • キャストした側とされる側で依存関係を持つ事になる。 • 依存関係を持ったBP同士は双方のコンパイルが必須になり、依存関 係が複雑になればコンパイル速度は無視出来ないものになる。
インターフェース関数を使おう • インターフェースは呼び出し 元に依存せず安全に呼び出 せます。 • ターゲットがアクターである必 要ですらなく、安全にハンドリ ングしてくれます。 • 何よりも依存関係もなくコン パイル時間が長くならない!
インターフェースによるカプセル化 • 本来インターフェースはオブジェクト指向言語由来の考え方であり、今の 時代においても有効な手段。 • カプセル化は情報隠蔽(Private化)の事だけではありません。 • インターフェースにおけるカプセル化は、オブジェクトを抽象化し、依存関 係をなくすものですが、プロのゲームプログラマーの方でもこれを理解され ずに使っている方が多く、少し勿体なく思います。
更にブループリント インターフェースのメリット • 相手が誰であろうと、インターフェースを継承していようがなかろうがなんと 誰でも安全にインターフェース呼び出しが出来る! • C++の仮想関数と同様の使い方が出来ます。ポリモーフィズムによるア クターごとによる多態性の実現! • 相手の詳細を知らなくても呼び出せるので、ブループリント間での通信や メッセージハンドリングが出来る!
インターフェースについてもっと詳しく知りたい方はこちら! http://unrealengine.hatena blog.com/entry/2014/09/2 3/201458
用法用量を守って、 正しくキャストお使いください
まとめ
ブループリントは常に進化し続けています • 本日公開したTipsはまだまだ一部。 • UE4同様にブループリントも常に進化しており、どんどん便利に。 • ビジュアルスクリプトに最初は慣れないかもしれませんが、一度覚えてし まえば普通にコーディングするよりも生産性が上がります。 ブループリントでトライ&エラーを早めてゲーム作りを素早く!楽しく!