狠狠撸

狠狠撸Share a Scribd company logo
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トラックも作成出来ます。
自動再生、ループなども簡単。
動く床やオブジェクトがすぐ作れる!
ブループリントのデバッグ
ブループリントのデバッグ
ブレークポイントとウォッチ ブループリント用デバッガー
ブループリントデバッグのデモ动画
ブループリントの差分とマージ
ブループリントの差分确认
差分确认のデモ动画
ブループリントのマージ(3奥补测方式)
マージのデモ动画
ちなみにブループリントはテキストでコピペも可能
ノードを選択してコピー メモ帳にペースト
ビジュアルスクリプトだけど
コードを扱うのと変わらない配慮
コンストラクションスクリプト
コンストラクションスクリプトとは?
? オブジェクトが生成されるタイ
ミングで実行されるグラフ。
? ゲームを再生していなくても
実行される唯一の存在。
? レベル内でアクター毎に違う
挙動を設定する事が出来る。
ゲームを再生していなくても実行する
装備品のアタッチをする 各種エディター内でも反映!
ダイナミックマテリアルインスタンス
コンストラクションスクリプト
で設定しておくと…
ゲームを実行する前に動的に
マテリアルを変更できるようになる!
見た目の調整だけでゲームを
実行したくないという場合もある
本来ゲームを実行しないと
確認出来ないものも確認が可能!
数学式
数学式(Math Expression)
? ノードだけで複雑な式を組み
立てるのはとても大変。
? そこで登場したのがテキスト
から数学式を自動で生成す
るノード。
? かなり複雑な数式でも書け
る。超便利なのでどんどん使
いましょう!
ベクトル、変数、数学関数などを自动的に认识!
复雑な论理演算も翱碍!
少しでも面倒な式は
数学式ノードに書きましょう!
乱数
乱数(ランダムストリーム)
? 通常の乱数と基本的には同
じ。IntやFloatやVectorな
ど沢山の乱数がとれる。
? ランダムストリームの初期シー
ド値を固定すれば何度やっ
ても同じ結果に。
? 使うだけならとても简単!
バウンディングボックス内のVectorをランダムに!
コンストラクションスクリプトで… ボックス内に毎回ランダムで配置
変数のスライダーとクランプ
変数のスライダーとクランプ
? 一部の変数はエディター上で
スライダー操作が出来るよう
になっています。
? 変数を公開すれば自動的に
スライダーになります。
? スライダー操作はリアルタイム
の変化を確認出来て、とて
も便利です!
スライダー範囲を設定と値の上限下限値でクランプ
マウスでグリグリと横にスライド 変な値が入っても自動クランプ
痴别肠迟辞谤の3顿ウィジェット
Vector変数はビューポート上に表示出来る
ベクトルの変数でチェックする 3Dウィジェットが表示される!
构造体
构造体について
? ユーザー定義の构造体を作
成すると、自動的に3個の
ノードが生成されます。
? Break系とMake系とSet
members in系ノード。
? これらのノードを使って構造
体の操作を行ないます。
不要な构造体メンバーは隠す事が可能
詳細からチェックを外す チェックされているメンバーのみに
更にこんな机能も…
直接构造体ピンからメンバーを操作も可能!
ノードの分割というのが可能 メンバーが出現!
ぶっちゃけ、こちらの方が便利!
ノード作らなくていいし…
好きな方を使いましょう!
ケースバイケースという事で…
マクロの活用法
マクロって関数と比べてどうなの?
? 関数があるのになぜマクロが
必要なのか?
? マクロを使うタイミングがよくわ
からない…
? ぶっちゃけ全部関数でいいの
では?
徹底比較!関数 VS マクロ
関数
? 基本的にターゲット(誰に対して
行なうか)を必要とする。
? 必ず実行前にコンパイルをする
必要がある。
? 純粋関数でない限り、実行線は
必ず入出力ともひとつずつのみ。
? Latentノード使用不可。
マクロ
? 親クラスを指定するので、ターゲッ
ト指定が必要ない。
? 実はインライン展開されるので、
コンパイルが必要ない。
? 実行線を入出力共にいくらでも
持たせる事が可能。
? Latentノード使用可能。
わかりやすいマクロの有効活用例(颁辞尘辫补谤别滨苍迟)
そもそも使用目的が違う
? 関数は外部に機能を公開するために使用する。
? マクロは継承されたクラス内でのユーティリティとして使う。
? 関数は10台の車を生産するのにひとつの工場で作る。
? マクロは10台の車を10の工場で1台ずつ作る。
? 最終的にインライン化されるマクロの方が効率的になる。
AnswerHubで、とても詳しい解説がありました
https://answers.unrealengi
ne.com/questions/30834/
whats-the-difference-
between-blueprint-macros-
and.html
マクロの方が制限が少なく、
ビジュアルスクリプトの恩恵が強い!
用法用量を守って、
正しくマクロをお使いください
キャスト VS インターフェース
キャスト便利過ぎー!問題
? キャストは手軽に別のブルー
プリントの情報が参照出来
て便利。
? 便利過ぎて多用し過ぎてま
せんか?
? キャストは便利ですが、それ
なりに諸刃の剣です。
キャストの問題点
? キャストは失敗してしまう可能性があり、エラーハンドリングミスによっては
ゲームが正しく実行されない可能性がある。
? キャストした側とされる側で依存関係を持つ事になる。
? 依存関係を持ったBP同士は双方のコンパイルが必須になり、依存関
係が複雑になればコンパイル速度は無視出来ないものになる。
インターフェース関数を使おう
? インターフェースは呼び出し
元に依存せず安全に呼び出
せます。
? ターゲットがアクターである必
要ですらなく、安全にハンドリ
ングしてくれます。
? 何よりも依存関係もなくコン
パイル時間が長くならない!
インターフェースによるカプセル化
? 本来インターフェースはオブジェクト指向言語由来の考え方であり、今の
時代においても有効な手段。
? カプセル化は情報隠蔽(Private化)の事だけではありません。
? インターフェースにおけるカプセル化は、オブジェクトを抽象化し、依存関
係をなくすものですが、プロのゲームプログラマーの方でもこれを理解され
ずに使っている方が多く、少し勿体なく思います。
更にブループリント インターフェースのメリット
? 相手が誰であろうと、インターフェースを継承していようがなかろうがなんと
誰でも安全にインターフェース呼び出しが出来る!
? C++の仮想関数と同様の使い方が出来ます。ポリモーフィズムによるア
クターごとによる多態性の実現!
? 相手の詳細を知らなくても呼び出せるので、ブループリント間での通信や
メッセージハンドリングが出来る!
インターフェースについてもっと詳しく知りたい方はこちら!
http://unrealengine.hatena
blog.com/entry/2014/09/2
3/201458
用法用量を守って、
正しくキャストお使いください
まとめ
ブループリントは常に進化し続けています
? 本日公開したTipsはまだまだ一部。
? UE4同様にブループリントも常に進化しており、どんどん便利に。
? ビジュアルスクリプトに最初は慣れないかもしれませんが、一度覚えてし
まえば普通にコーディングするよりも生産性が上がります。
ブループリントでトライ&エラーを早めてゲーム作りを素早く!楽しく!

More Related Content

Powerful of blueprint visual scripting