Powerful of blueprint visual scripting

81
Powerful of Blueprint Visual Scripting 知られざるブループリントについて フリーランスゲームクリエイター コミュニティサポーター 中村 匡彦 Unreal Fes 2015 Osaka

Transcript of Powerful of blueprint visual scripting

Page 1: Powerful of blueprint visual scripting

Powerful of Blueprint Visual Scripting

知られざるブループリントについて

フリーランスゲームクリエイターコミュニティサポーター

中村匡彦

Unreal Fes 2015 Osaka

Page 2: Powerful of blueprint visual scripting

自己紹介

名前 : 中村 匡彦

Twitterだと @aizen76

元々はゲームプログラマー(3DアクションゲームやMMO作ってた)

去年のアンリアルフェスでも喋らさせていただきました。

普段はフリーでゲームを作るお仕事をしたり、ゲームの作り方を教えたり。

Unreal Engine歴は実はまだ1年だけ。

Page 3: Powerful of blueprint visual scripting

ところで皆さん。ブループリントどうですか?

Page 4: Powerful of blueprint visual scripting

実際のところ色々な意見があると思いますが…

Page 5: Powerful of blueprint visual scripting

今回はブループリントとビジュアルスクリプティングの良いところを実演を混じえて紹介していきたいと思います!

Page 6: Powerful of blueprint visual scripting

ショートカットについて

Page 7: Powerful of blueprint visual scripting

かなりのショートカットがあります

Blueprint EditorCheat Sheet

https://docs.unrealengine.com/latest/attachments/Engine/Blueprints/UserGuide/CheatSheet/BlueprintCheatSheet-1989117414.pdf

※公式です

Page 8: Powerful of blueprint visual scripting

ショートカットを覚えるのはツールの基本

• どれだけ使い勝手のいいツールでも、ショートカットを覚えないと使いにくいのは当たり前

• 煩わしいと思った操作ほど楽に操作出来るかも?

• チートシートを印刷してモニターの近くに貼るのはいいかも。

Page 9: Powerful of blueprint visual scripting

コメント機能

Page 10: Powerful of blueprint visual scripting

ただのコメントではない!

• UE4のコメント機能はコメントだけの使いみちではなくて、ノードを整理する機能として使えます。

• グルーピング化、カラー変更、ズームアウトしても読めるバブルコメントなどなど。

• コメント内コメントも可能。ちゃんと深度設定も出来ます。

Page 11: Powerful of blueprint visual scripting

再ルートノード

Page 12: Powerful of blueprint visual scripting

ノードの線を再度ルーティングする時に

• ノードピンの線を固定出来る仕組み。複数のピンの線をひとつにまとめることも。

• 沢山のケーブルを束ねる結束バンドのイメージ。線が複雑になってきたらこれで綺麗にしましょう。

Page 13: Powerful of blueprint visual scripting

ノードの折り畳み

Page 14: Powerful of blueprint visual scripting

複雑なノードでも一発で折り畳めます

BEFORE AFTER

Page 15: Powerful of blueprint visual scripting

関数化、マクロ化も一発

関数へ折り畳む マクロへ折り畳む

Page 16: Powerful of blueprint visual scripting

定期的にノードを整理しましょう

• ソースコードなどと同じようにノードも整理しないとスパゲッティになります。

• 見た目で言えばソースコードよりもノードは酷いか一発でわかってしまうので、後で見た人が苦労しないようなノード作成を心掛けましょう。

• ブループリントにはここまで紹介した機能だけでも十分にノードを整理出来る機能が備わっているはずです。

Page 17: Powerful of blueprint visual scripting

基本フロー制御ノード

Page 18: Powerful of blueprint visual scripting

覚えると非常に便利な基本フロー制御ノード

• 分岐を行なうBranchノードやループをするForEachLoopノードも基本制御ノードです。

• 内部的にはマクロを用いて実装されています。

• 地味だけど便利な縁の下の力持ちタイプなナイスガイ

• 今回はBranchやLoopとSwitch以外を紹介します。

Page 19: Powerful of blueprint visual scripting

Sequence

• 上から順番にシーケンスな流れとしてノードを実行してくれるノード。

• シンプルで分かりやすいですが、ノードの見た目を整理するのに必須なノード。

• Sequenceなしでノードを作っていると、横にとても長くなってスパゲッティになりがち。

Page 20: Powerful of blueprint visual scripting

DoN & DoOnce

• N回実行するか、もしくは一度だけフローを実行してくれるノード。

• フラグや変数を用いなくても回数制限をかけたい時に便利。

• 一度Resetを実行すれば再度同じ条件で実行してくれます。

• DoOnceはResetかけるまで実行しないという使い方も可能。

Page 21: Powerful of blueprint visual scripting

FlipFlop

• FlipFlop回路と聞けばわかる人も結構いるはず。

• ノードが実行されるたびにルートが切り替わり、AとBが交互に実行されます。

• 何かに入った時と出た時で交互に違う処理をさせたい時にとても便利!

Page 22: Powerful of blueprint visual scripting

Gate

• その名前の通り、ゲートが開いている時にのみ処理するノード。

• Enterピンを通っている間にOpenピンが処理されるとその間に処理が走ります。

• Closeさせると処理が止まる。Toggleの場合は交互に入れ替わります。

Page 23: Powerful of blueprint visual scripting

MultiGate

• 名前こそGateとついているが、さきほどとは別物のノード。

• ノードが実行される度にOutピンの上から順番に実行されます。

• Resetをかけると実行ピンが最初からになり、Is Randomでランダムに実行されます。Loopもチェックするとループします。

Page 24: Powerful of blueprint visual scripting

Delay & Retriggerable Delay

• 指定した秒数まで一度停止してからその後に実行してくれるノード。

• 一度ノードの実行が完全に止まったように見えますが、ちゃんと実行してくれます。

• Retriggerable Delayは再度実行した場合、時間をリセットしてから実行してくれます。

Page 25: Powerful of blueprint visual scripting

タイムラインノード

Page 26: Powerful of blueprint visual scripting

Timeline & カーブエディター

タイムラインノード カーブエディター

Page 27: Powerful of blueprint visual scripting

これぞビジュアルスクリプトの真骨頂!

• Timelineノードはこれぞまさしくビジュアルスクリプティングだからこそ出来るモノ。

• カーブエディターと合わせてリアルタイムに動きを作成する事が出来ます。

• Float,Vector,Color以外にEventトラックも作成出来ます。自動再生、ループなども簡単。

動く床やオブジェクトがすぐ作れる!

Page 28: Powerful of blueprint visual scripting

ブループリントのデバッグ

Page 29: Powerful of blueprint visual scripting

ブループリントのデバッグ

ブレークポイントとウォッチ ブループリント用デバッガー

Page 30: Powerful of blueprint visual scripting

ブループリントデバッグのデモ動画

Page 31: Powerful of blueprint visual scripting

ブループリントの差分とマージ

Page 32: Powerful of blueprint visual scripting

ブループリントの差分確認

Page 33: Powerful of blueprint visual scripting

差分確認のデモ動画

Page 34: Powerful of blueprint visual scripting

ブループリントのマージ(3Way方式)

Page 35: Powerful of blueprint visual scripting

マージのデモ動画

Page 36: Powerful of blueprint visual scripting

ちなみにブループリントはテキストでコピペも可能

ノードを選択してコピー メモ帳にペースト

Page 37: Powerful of blueprint visual scripting

ビジュアルスクリプトだけどコードを扱うのと変わらない配慮

Page 38: Powerful of blueprint visual scripting

コンストラクションスクリプト

Page 39: Powerful of blueprint visual scripting

コンストラクションスクリプトとは?

• オブジェクトが生成されるタイミングで実行されるグラフ。

• ゲームを再生していなくても実行される唯一の存在。

• レベル内でアクター毎に違う挙動を設定する事が出来る。

Page 40: Powerful of blueprint visual scripting

ゲームを再生していなくても実行する

装備品のアタッチをする 各種エディター内でも反映!

Page 41: Powerful of blueprint visual scripting

ダイナミックマテリアルインスタンス

コンストラクションスクリプトで設定しておくと…

ゲームを実行する前に動的にマテリアルを変更できるようになる!

Page 42: Powerful of blueprint visual scripting

見た目の調整だけでゲームを実行したくないという場合もある

Page 43: Powerful of blueprint visual scripting

本来ゲームを実行しないと確認出来ないものも確認が可能!

Page 44: Powerful of blueprint visual scripting

数学式

Page 45: Powerful of blueprint visual scripting

数学式(Math Expression)

• ノードだけで複雑な式を組み立てるのはとても大変。

• そこで登場したのがテキストから数学式を自動で生成するノード。

• かなり複雑な数式でも書ける。超便利なのでどんどん使いましょう!

Page 46: Powerful of blueprint visual scripting

ベクトル、変数、数学関数などを自動的に認識!

Page 47: Powerful of blueprint visual scripting

複雑な論理演算もOK!

Page 48: Powerful of blueprint visual scripting

少しでも面倒な式は数学式ノードに書きましょう!

Page 49: Powerful of blueprint visual scripting

乱数

Page 50: Powerful of blueprint visual scripting

乱数(ランダムストリーム)

• 通常の乱数と基本的には同じ。IntやFloatやVectorなど沢山の乱数がとれる。

• ランダムストリームの初期シード値を固定すれば何度やっても同じ結果に。

• 使うだけならとても簡単!

Page 51: Powerful of blueprint visual scripting

バウンディングボックス内のVectorをランダムに!

コンストラクションスクリプトで… ボックス内に毎回ランダムで配置

Page 52: Powerful of blueprint visual scripting

変数のスライダーとクランプ

Page 53: Powerful of blueprint visual scripting

変数のスライダーとクランプ

• 一部の変数はエディター上でスライダー操作が出来るようになっています。

• 変数を公開すれば自動的にスライダーになります。

• スライダー操作はリアルタイムの変化を確認出来て、とても便利です!

Page 54: Powerful of blueprint visual scripting

スライダー範囲を設定と値の上限下限値でクランプ

マウスでグリグリと横にスライド 変な値が入っても自動クランプ

Page 55: Powerful of blueprint visual scripting

Vectorの3Dウィジェット

Page 56: Powerful of blueprint visual scripting

Vector変数はビューポート上に表示出来る

ベクトルの変数でチェックする 3Dウィジェットが表示される!

Page 57: Powerful of blueprint visual scripting

構造体

Page 58: Powerful of blueprint visual scripting

構造体について

• ユーザー定義の構造体を作成すると、自動的に3個のノードが生成されます。

• Break系とMake系とSet members in系ノード。

• これらのノードを使って構造体の操作を行ないます。

Page 59: Powerful of blueprint visual scripting

不要な構造体メンバーは隠す事が可能

詳細からチェックを外す チェックされているメンバーのみに

Page 60: Powerful of blueprint visual scripting

更にこんな機能も…

Page 61: Powerful of blueprint visual scripting

直接構造体ピンからメンバーを操作も可能!

ノードの分割というのが可能 メンバーが出現!

Page 62: Powerful of blueprint visual scripting

ぶっちゃけ、こちらの方が便利!ノード作らなくていいし…

Page 63: Powerful of blueprint visual scripting

好きな方を使いましょう!ケースバイケースという事で…

Page 64: Powerful of blueprint visual scripting

マクロの活用法

Page 65: Powerful of blueprint visual scripting

マクロって関数と比べてどうなの?

• 関数があるのになぜマクロが必要なのか?

• マクロを使うタイミングがよくわからない…

• ぶっちゃけ全部関数でいいのでは?

Page 66: Powerful of blueprint visual scripting

徹底比較!関数 VS マクロ

関数

• 基本的にターゲット(誰に対して行なうか)を必要とする。

• 必ず実行前にコンパイルをする必要がある。

• 純粋関数でない限り、実行線は必ず入出力ともひとつずつのみ。

• Latentノード使用不可。

マクロ

• 親クラスを指定するので、ターゲット指定が必要ない。

• 実はインライン展開されるので、コンパイルが必要ない。

• 実行線を入出力共にいくらでも持たせる事が可能。

• Latentノード使用可能。

Page 67: Powerful of blueprint visual scripting

わかりやすいマクロの有効活用例(CompareInt)

Page 68: Powerful of blueprint visual scripting

そもそも使用目的が違う

• 関数は外部に機能を公開するために使用する。

• マクロは継承されたクラス内でのユーティリティとして使う。

• 関数は10台の車を生産するのにひとつの工場で作る。

• マクロは10台の車を10の工場で1台ずつ作る。

• 最終的にインライン化されるマクロの方が効率的になる。

Page 69: Powerful of blueprint visual scripting

AnswerHubで、とても詳しい解説がありました

https://answers.unrealengine.com/questions/30834/whats-the-difference-between-blueprint-macros-and.html

Page 70: Powerful of blueprint visual scripting

マクロの方が制限が少なく、ビジュアルスクリプトの恩恵が強い!

Page 71: Powerful of blueprint visual scripting

用法用量を守って、正しくマクロをお使いください

Page 72: Powerful of blueprint visual scripting

キャスト VS インターフェース

Page 73: Powerful of blueprint visual scripting

キャスト便利過ぎー!問題

• キャストは手軽に別のブループリントの情報が参照出来て便利。

• 便利過ぎて多用し過ぎてませんか?

• キャストは便利ですが、それなりに諸刃の剣です。

Page 74: Powerful of blueprint visual scripting

キャストの問題点

• キャストは失敗してしまう可能性があり、エラーハンドリングミスによってはゲームが正しく実行されない可能性がある。

• キャストした側とされる側で依存関係を持つ事になる。

• 依存関係を持ったBP同士は双方のコンパイルが必須になり、依存関係が複雑になればコンパイル速度は無視出来ないものになる。

Page 75: Powerful of blueprint visual scripting

インターフェース関数を使おう

• インターフェースは呼び出し元に依存せず安全に呼び出せます。

• ターゲットがアクターである必要ですらなく、安全にハンドリングしてくれます。

• 何よりも依存関係もなくコンパイル時間が長くならない!

Page 76: Powerful of blueprint visual scripting

インターフェースによるカプセル化

• 本来インターフェースはオブジェクト指向言語由来の考え方であり、今の時代においても有効な手段。

• カプセル化は情報隠蔽(Private化)の事だけではありません。

• インターフェースにおけるカプセル化は、オブジェクトを抽象化し、依存関係をなくすものですが、プロのゲームプログラマーの方でもこれを理解されずに使っている方が多く、少し勿体なく思います。

Page 77: Powerful of blueprint visual scripting

更にブループリント インターフェースのメリット

• 相手が誰であろうと、インターフェースを継承していようがなかろうがなんと誰でも安全にインターフェース呼び出しが出来る!

• C++の仮想関数と同様の使い方が出来ます。ポリモーフィズムによるアクターごとによる多態性の実現!

• 相手の詳細を知らなくても呼び出せるので、ブループリント間での通信やメッセージハンドリングが出来る!

Page 78: Powerful of blueprint visual scripting

インターフェースについてもっと詳しく知りたい方はこちら!

http://unrealengine.hatenablog.com/entry/2014/09/23/201458

Page 79: Powerful of blueprint visual scripting

用法用量を守って、正しくキャストお使いください

Page 80: Powerful of blueprint visual scripting

まとめ

Page 81: Powerful of blueprint visual scripting

ブループリントは常に進化し続けています

• 本日公開したTipsはまだまだ一部。

• UE4同様にブループリントも常に進化しており、どんどん便利に。

• ビジュアルスクリプトに最初は慣れないかもしれませんが、一度覚えてしまえば普通にコーディングするよりも生産性が上がります。

ブループリントでトライ&エラーを早めてゲーム作りを素早く!楽しく!