出張ヒストリア ブループリントを書くにあたって大切なこと

15K Views

August 07, 16

スライド概要

2016年7月18日に行われたイベント「出張ヒストリア! UE4東京勉強会2016」にて発表させていただいたスライドです。

イベント詳細
https://historia.co.jp/archives/5091/

profile-image

株式会社ヒストリアは、Unreal Engine専門のソフトウェア開発会社です。ゲーム事業とエンタープライズ事業、2 つの軸でソフトウェアの企画、開発を行っています。また、Unreal Engine の学習を目的とした作品制作コンテスト『UE5ぷちコン』や、『出張ヒストリア! ゲーム開発勉強会』を主催、技術ブログを毎週更新など、Unreal Engine コミュニティを盛り上げる活動も行っております。

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

ブループリントを書くにあたって大切なこと たったひとつのシンプルな答え 2016/07/18 馬場俊行 historia Inc. 1

2.

自己紹介 株式会社ヒストリア 馬場俊行 プログラマー/レベルデザイナー 業界歴8年目 UE3歴約3年(コンシューマー、アーケード、モバイル) UE4歴約2年(コンシューマー、モバイル) historia Inc. 2

3.

まず、ブループリントとは? historia Inc. 3

4.

【ブループリントとは?】 • 特別なアセットで、アクタの種類を新規作成するために 使う直観的かつノードベースのインターフェース • デザイナーおよびゲームプレイプログラマーは、 新しく コードを書かなくても、アンリアル エディタからゲーム プレイの作成およびイタレーションをすぐに実行するこ とができる 出典:アンリアルエンジン4のドキュメントブループリント入門 historia Inc. 4

5.

【ブループリントとは?】 • そんな事は知っている! • もうある程度ブループリントは書ける • ノードをガシガシ繋げていけばいいんでしょ? 今回はそんな人を対象に、一歩踏み込んだ内容です historia Inc. 5

6.

ブループリントを書くにあたって 大切なこと historia Inc. 6

7.

【ブループリントを書くにあたって大切なこと】 Q.ブループリントを書くにあたって 唯一にして絶対の正義とは? historia Inc. 7

8.

【ブループリントを書くにあたって大切なこと】 A.見やすさ historia Inc. 8

9.

【ブループリントを書くにあたって大切なこと】 • 悪い例 historia Inc. 9

10.

【ブループリントを書くにあたって大切なこと】 • 実行ルートがあっちこっちに迷走している – 流れがわかりにくい • ルート同士が交差していたりノードと重なっている – ピンがどこに接続されているのかわからない • ノードとノードの距離が近すぎる – 全体的に見えにくい • コメントが一切無い – 何をやっているかよくわからない historia Inc. 10

11.

【ブループリントを書くにあたって大切なこと】 • ソースコードの可読性以上に視認性の重要さは大きい • ノードを綺麗に整理することは見た目以上に保守のしや すさに気づく • 特に大人数による開発では絶対的な正義となる historia Inc. 11

12.

【ブループリントを書くにあたって大切なこと】 では、どうすれば見やすくなるのか? historia Inc. 12

13.

【ブループリントを書くにあたって大切なこと】 • ノードの配置を整理して処理の流れを見やすくする historia Inc. 13

14.

【ノードの配置を整理して処理の流れを見やすくする】 • 処理の流れは左から右、上から下へ historia Inc. 14

15.

【ノードの配置を整理して処理の流れを見やすくする】 • 出来るだけルート同士が交差しないようにする historia Inc. 15

16.

【ノードの配置を整理して処理の流れを見やすくする】 • ノード同士の距離はある程度離す 知らない間に… historia Inc. 16

17.

【ノードの配置を整理して処理の流れを見やすくする】 • ノード同士の距離はある程度離す – ノードの大きさはアクター名や関数名の変更、 引数の追加などである程度変化する – エディタの言語設定を変更してもノードの大きさは変わる 言語を切り替えても ノードの大きさを変えない 設定があるので活用 historia Inc. 17

18.

【ノードの配置を整理して処理の流れを見やすくする】 • ノード同士の距離はある程度離す ノード同士の間隔は、ある程度余裕をもって! とはいえ、離れすぎると今度は 全体を把握しづらくなるので注意 historia Inc. 18

19.

【ノードの配置を整理して処理の流れを見やすくする】 ここでブループリント小話を一つ…… 「この処理の間にこの処理を入れてください」 「他のノード動かすのメンドクサイお」 「ノードとノードの間に無理やり入れるお」 「入りきれないからこの辺に置いておくお」 ∧_∧ ( ゚ω゚ ) ノード配置は任せろー バリバリC□l丶l丶 / ( ) やめて! (ノ と、 i しーJ historia Inc. 19

20.

【ノードの配置を整理して処理の流れを見やすくする】 その結果…… こうした繰り返しによって悲劇は生まれます…… historia Inc. 20

21.

【ノードの配置を整理して処理の流れを見やすくする】 「どうせまた後で修正が入るかも」 「とりあえずの仮処理かもしれないし…」 その気持ち、すごくわかります! とは言え、常に綺麗に保つことを心掛けましょう – ノードは複数選択する事で簡単にまとめて移動できる – 後述するコメント枠を活用することで、枠単位で移動できる ね、整理するのは簡単でしょ? historia Inc. 21

22.

【ブループリントを書くにあたって大切なこと】 • リルートノードを活用する historia Inc. 22

23.

【リルートノードを活用する】 • ルートがノードで隠れないように配置ができる • 別のルート同士の重なり合いも解消できる historia Inc. 23

24.

【リルートノードを活用する】 • ルートを枝分けして複数のピンに接続できる historia Inc. 24

25.

【リルートノードを活用する】 • 複数の実行ルートを合流させることができる historia Inc. 25

26.

【リルートノードを活用する】 リルートノードの作成自体はルート上でダブルクリック するだけで簡単に追加できる 右クリックからだと 「AddRerouteNode」 を選択すれば追加できる historia Inc. 26

27.

【ブループリントを書くにあたって大切なこと】 • コメントを活用する historia Inc. 27

28.

【コメントを活用する】 • コメントグループを使う – 複数ノードをまとめて囲う事で、関連処理が視覚的に分かる – コメントグループを移動させると中身をまとめて移動できる – EventGraph内で各イベントごとに囲うのも有効 historia Inc. 28

29.

【コメントグループを使う】 色を変えることによってより分かりやすく historia Inc. 29

30.

【コメントグループを使う】 コメントグループの作成自体はCキーを押すだけ historia Inc. 30

31.

【コメントを活用する】 • ノードコメントを使う – 手軽にコメントを挿入することができる – やりすぎると見にくくなる場合もある – ちょっとしたメモ程度で使う感覚の方がよいかも historia Inc. 31

32.

【ノードコメントを使う】 ノードを選択して右クリックし、「ノードのコメント」欄 に直接入力する historia Inc. 32

33.

【コメントを活用する】 • 説明/ツールヒント機能を使う – 変数や関数にカーソルを合わせると出る説明文 関数の場合は「説明」 変数の場合は「ツールヒント」 historia Inc. 33

34.

【ブループリントを書くにあたって大切なこと】 • ノードの簡略化を活用する – 関数化やマクロ化する以外でもノードをまとめる事が可能 複数のノードを一つのノードに まとめる事ができる historia Inc. 34

35.

【ノードの簡略化を活用する】 複数のノードを選択した状態で、右クリックし 「ノードを折りたたむ」をクリックする historia Inc. 35

36.

【ノードの簡略化を活用する】 マクロのノードをシンプルにすることも可能 普段使っている演算子のノード(+やーなど)と同じ機能 historia Inc. 36

37.

【ノードの簡略化を活用する】 マクロの詳細設定にて「コンパクトノードタイトル」に 表示する内容を記入する historia Inc. 37

38.

【ブループリントを書くにあたって大切なこと】 • 整理する – EventGraphを分ける – 関数や変数、マクロにはカテゴリを設定する historia Inc. 38

39.

【整理する】 増えがちなイベントは内容によってEventGraphを分ける historia Inc. 39

40.

【整理する】 カテゴリで関数やマクロをまとめておくと 右クリックのノード一覧も整理された状態で表示される historia Inc. 40

41.

【整理する】 • これらの整理作業は、最初のうちはあまり必要ない • 開発が進むにつれ、実装内容が増えてきた時に有効 • とくに開発後期になると大量のイベントや関数、マクロ などが増えるため、整理していると作業効率はよくなる historia Inc. 41

42.

【ブループリントを書くにあたって大切なこと】 • 関数、マクロを活用する – 同じような処理の流れはマクロを使用する – 似たような機能は関数にする historia Inc. 42

43.

【関数・マクロを活用する】 こんな事していませんか? 「うーん、ここから先の処理の流れはこっちと一緒だな…」 「よし、だったらここでこっちのノードに繋げて――」 「これで完成だ!」 historia Inc. 43

44.

【関数・マクロを活用する】 \\ \\\\ ../´: : : : : : : : : : : : : : : : : `:\、 /// __ \\\\ \ \ /: : : : : : : : : : : : : : : : :ヽ: : : : : : : :`\ / ヽ/ \ \\ /: : : : : : : : : : : : :: : : : ∧、:ヽ: : : : : : : : :\ / // ノ \ \ /: : : : : : : : : : : : : : //: / ヽ: : : : : : : : : : : : / _|_ \\\\ __/: : : : : : : : : : イ: / .i: / .ヽ: ヘ: : : : : : : : : ヽ / | | ── . . ─. | |  ̄`|: : : : : : :/ |:/ /.|:/ ヽ:| ヽ: :i: : : : : : :ヽ / / / _/ ─>: : : : : :`} | .|: : : : i: / レ´ |/ N\__:∧: : : : : : :i | ==: : : : : : /──: : : : :|:// ̄ ̄ヽ / ̄ヽ ∨ヽ: : : : : :卜 卜三三三: : : / i: /__ }: /|v| /´ ̄`iヾ ./´ ̄ヽヽ ∧: : : N N: \ ==≡≡ | ≡=─: :/ 〉/ 〉i: i ミ| { ||| .| | ||| } |´ i: : : : :i: : : : : :Z =≡_|_ | | V N: N | |::i ヽ_ ノ .ヽ_ノ ´ .i: ノ∧ノ: : : : : :| | _ 彡彡 \ .|: .| 卜: 丿: : : : :ノN .| _ / ヽi:─ し N\____ {:::i .N∨ |_ // |ヘ: ヽ / N }ヽ| \\ \ \\ .| / /// / wNヽ/ i \/ ノ \ \\ \\ ◯\ /// / / // / \\─_____ /\\ \ \\ \\\\ つ // / // / \\/ミミY彡/// \\ \ \ \ \ |.| |.| // // / 〉7NV∧ r〈 i \\ \ \\ || .|| .○ ○ historia Inc. 44

45.

【関数・マクロを活用する】 • 関数もしくはマクロを使いましょう historia Inc. 45

46.

【関数・マクロを活用する】 ところで… 関数とマクロの違いって把握してますか? historia Inc. 46

47.

【関数・マクロを活用する】 それぞれで出来ること、できない事 入出力ピン Latentノード 継承先のクラス 関数 追加できない 使えない 呼び出せる (オーバーライドも可能) マクロ 追加できる 使える 呼び出せない historia Inc. 47

48.

【関数・マクロを活用する】 • つまりどういうこと? – マクロは、実行ピンを増減でき、処理待ち用のLatentノードが 使えるため、処理の流れを簡潔にまとめることができる – 関数は、継承先でのクラスでも使用でき、中身の処理を継承先 でも上書きできるため、同じような機能をまとめることで効力 を発揮する historia Inc. 48

49.

【関数・マクロを活用する】 • マクロ使用の具体例 – フェード処理などで、フェードの開始直後と終了後のタイミン グをどちらも取得したい場合に簡単に実装できる historia Inc. 49

50.

【マクロ使用の具体例】 フェード用マクロの中身 historia Inc. 50

51.

【関数・マクロを活用する】 • 関数使用の具体例 – 移動処理の機能を関数化して実装 historia Inc. 51

52.

【関数使用の具体例】 派生先で移動処理の実装を専用のものに書き換える historia Inc. 52

53.

【関数使用の具体例】 もしくは派生先で、さらに専用の処理を追加する historia Inc. 53

54.

【関数使用の具体例】 関数を使用する側はどちらの実装なのか知る必要はない ただ移動を行う機能という事だけ知っていれば良い historia Inc. 54

55.
[beta]
【ブループリントを書くにあたって大切なこと】

ブループリントはすぐに汚くなるわけではありません。
少しずつ少しずつ汚れていき、
気がついたら大変な状態になる場合はよくあります。
三

三三
/;:"ゝ 三三 f;:二iュ どうしてこんなになるまで放っておいたんだ!
三
_ゞ::.ニ!
,..'´ ̄`ヽノン
/.;: .:}^(
<;:::::i:::::::.::: :}:} 三三
〈::::.´ .:;.へに)二/.::i :::::::,.イ ト ヽ__
,へ;:ヾ-、ll__/.:::::、:::::f=ー‘==、`ー-=“⌒ヽ ←ブループリント
. 〈::ミ/;;;iー゙ii====|:::::::.` Y ̄ ̄ ̄,.シ'=llー一'";;;ド'
};;;};;;;;! ̄ll ̄ ̄|:::::::::.ヽ\-‐'"´ ̄ ̄ll
historia Inc.

55

56.

【ブループリントを書くにあたって大切なこと】 これらを上手く活用し、 見やすいブループリントを書くよう心掛けましょう! historia Inc. 56

57.

おわり ご清聴ありがとうございました historia Inc. 57