Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Powerful of blueprint visual scripting

15,932 views

Published on

Unreal Fes Osaka 2015で発表したスライドです。

Published in: Engineering

Powerful of blueprint visual scripting

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

×