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

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

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

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

historia Inc.

たったひとつのシンプルな答え

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

2016/07/18 馬場俊行1

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

historia Inc.

自己紹介

株式会社ヒストリア

馬場俊行

プログラマー/レベルデザイナー

業界歴8年目

UE3歴約3年(コンシューマー、アーケード、モバイル)

UE4歴約2年(コンシューマー、モバイル)

2

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

historia Inc.

まず、ブループリントとは?

3

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

historia Inc.

【ブループリントとは?】

• 特別なアセットで、アクタの種類を新規作成するために使う直観的かつノードベースのインターフェース

• デザイナーおよびゲームプレイプログラマーは、 新しくコードを書かなくても、アンリアル エディタからゲームプレイの作成およびイタレーションをすぐに実行することができる

出典:アンリアルエンジン4のドキュメントブループリント入門

4

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

historia Inc.

【ブループリントとは?】

• そんな事は知っている!

• もうある程度ブループリントは書ける

• ノードをガシガシ繋げていけばいいんでしょ?

今回はそんな人を対象に、一歩踏み込んだ内容です

5

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

historia Inc.

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

6

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

historia Inc.

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

Q.ブループリントを書くにあたって唯一にして絶対の正義とは?

7

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

historia Inc.

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

8

A.見やすさ

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

historia Inc.

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

• 悪い例

9

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

historia Inc.

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

• 実行ルートがあっちこっちに迷走している

–流れがわかりにくい

• ルート同士が交差していたりノードと重なっている

–ピンがどこに接続されているのかわからない

• ノードとノードの距離が近すぎる

–全体的に見えにくい

• コメントが一切無い

–何をやっているかよくわからない

10

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

historia Inc.

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

• ソースコードの可読性以上に視認性の重要さは大きい

• ノードを綺麗に整理することは見た目以上に保守のしやすさに気づく

• 特に大人数による開発では絶対的な正義となる

11

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

historia Inc.

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

12

では、どうすれば見やすくなるのか?

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

historia Inc.

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

• ノードの配置を整理して処理の流れを見やすくする

13

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

historia Inc.

【ノードの配置を整理して処理の流れを見やすくする】

• 処理の流れは左から右、上から下へ

14

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

historia Inc.

【ノードの配置を整理して処理の流れを見やすくする】

• 出来るだけルート同士が交差しないようにする

15

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

historia Inc.

【ノードの配置を整理して処理の流れを見やすくする】

• ノード同士の距離はある程度離す

16

知らない間に…

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

historia Inc.

【ノードの配置を整理して処理の流れを見やすくする】

• ノード同士の距離はある程度離す

–ノードの大きさはアクター名や関数名の変更、

引数の追加などである程度変化する

–エディタの言語設定を変更してもノードの大きさは変わる

17

言語を切り替えてもノードの大きさを変えない設定があるので活用

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

historia Inc.

【ノードの配置を整理して処理の流れを見やすくする】

• ノード同士の距離はある程度離す

とはいえ、離れすぎると今度は

全体を把握しづらくなるので注意18

ノード同士の間隔は、ある程度余裕をもって!

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

historia Inc.

【ノードの配置を整理して処理の流れを見やすくする】

ここでブループリント小話を一つ……

「この処理の間にこの処理を入れてください」

「他のノード動かすのメンドクサイお」

「ノードとノードの間に無理やり入れるお」

「入りきれないからこの辺に置いておくお」

19

∧_∧( ゚ω゚ ) ノード配置は任せろー

バリバリC□l丶l丶/ ( ) やめて!(ノ と、 i

しーJ

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

historia Inc.

【ノードの配置を整理して処理の流れを見やすくする】

その結果……

こうした繰り返しによって悲劇は生まれます……

20

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

historia Inc.

【ノードの配置を整理して処理の流れを見やすくする】

「どうせまた後で修正が入るかも」

「とりあえずの仮処理かもしれないし…」

その気持ち、すごくわかります!

とは言え、常に綺麗に保つことを心掛けましょう

–ノードは複数選択する事で簡単にまとめて移動できる

–後述するコメント枠を活用することで、枠単位で移動できる

ね、整理するのは簡単でしょ?

21

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

historia Inc.

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

• リルートノードを活用する

22

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

historia Inc.

【リルートノードを活用する】

• ルートがノードで隠れないように配置ができる

• 別のルート同士の重なり合いも解消できる

23

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

historia Inc.

【リルートノードを活用する】

• ルートを枝分けして複数のピンに接続できる

24

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

historia Inc.

【リルートノードを活用する】

• 複数の実行ルートを合流させることができる

25

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

historia Inc.

【リルートノードを活用する】

リルートノードの作成自体はルート上でダブルクリックするだけで簡単に追加できる

26

右クリックからだと「AddRerouteNode」を選択すれば追加できる

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

historia Inc.

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

• コメントを活用する

27

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

historia Inc.

【コメントを活用する】

• コメントグループを使う

–複数ノードをまとめて囲う事で、関連処理が視覚的に分かる

–コメントグループを移動させると中身をまとめて移動できる

– EventGraph内で各イベントごとに囲うのも有効

28

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

historia Inc.

【コメントグループを使う】

色を変えることによってより分かりやすく

29

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

historia Inc.

【コメントグループを使う】

コメントグループの作成自体はCキーを押すだけ

30

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

historia Inc.

【コメントを活用する】

• ノードコメントを使う

–手軽にコメントを挿入することができる

–やりすぎると見にくくなる場合もある

–ちょっとしたメモ程度で使う感覚の方がよいかも

31

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

historia Inc.

【ノードコメントを使う】

32

ノードを選択して右クリックし、「ノードのコメント」欄に直接入力する

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

historia Inc.

【コメントを活用する】

• 説明/ツールヒント機能を使う

–変数や関数にカーソルを合わせると出る説明文

33

変数の場合は「ツールヒント」

関数の場合は「説明」

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

historia Inc.

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

• ノードの簡略化を活用する

–関数化やマクロ化する以外でもノードをまとめる事が可能

34

複数のノードを一つのノードにまとめる事ができる

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

historia Inc.

【ノードの簡略化を活用する】

複数のノードを選択した状態で、右クリックし

「ノードを折りたたむ」をクリックする

35

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

historia Inc.

【ノードの簡略化を活用する】

マクロのノードをシンプルにすることも可能

普段使っている演算子のノード(+やーなど)と同じ機能

36

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

historia Inc.

【ノードの簡略化を活用する】

マクロの詳細設定にて「コンパクトノードタイトル」に

表示する内容を記入する

37

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

historia Inc.

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

• 整理する

– EventGraphを分ける

–関数や変数、マクロにはカテゴリを設定する

38

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

historia Inc.

【整理する】

増えがちなイベントは内容によってEventGraphを分ける

39

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

historia Inc.

【整理する】

カテゴリで関数やマクロをまとめておくと

右クリックのノード一覧も整理された状態で表示される

40

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

historia Inc.

【整理する】

• これらの整理作業は、最初のうちはあまり必要ない

• 開発が進むにつれ、実装内容が増えてきた時に有効

• とくに開発後期になると大量のイベントや関数、マクロなどが増えるため、整理していると作業効率はよくなる

41

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

historia Inc.

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

• 関数、マクロを活用する

–同じような処理の流れはマクロを使用する

–似たような機能は関数にする

42

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

historia Inc.

【関数・マクロを活用する】

こんな事していませんか?「うーん、ここから先の処理の流れはこっちと一緒だな…」「よし、だったらここでこっちのノードに繋げて――」

「これで完成だ!」

43

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

historia Inc.

【関数・マクロを活用する】

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 \\ \ \\ || .||

.○○

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

historia Inc.

【関数・マクロを活用する】

• 関数もしくはマクロを使いましょう

45

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

historia Inc.

【関数・マクロを活用する】

46

ところで…関数とマクロの違いって把握してますか?

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

historia Inc.

【関数・マクロを活用する】

それぞれで出来ること、できない事

47

入出力ピン Latentノード 継承先のクラス

関数 追加できない 使えない 呼び出せる(オーバーライドも可能)

マクロ 追加できる 使える 呼び出せない

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

historia Inc.

【関数・マクロを活用する】

• つまりどういうこと?

–マクロは、実行ピンを増減でき、処理待ち用のLatentノードが使えるため、処理の流れを簡潔にまとめることができる

–関数は、継承先でのクラスでも使用でき、中身の処理を継承先でも上書きできるため、同じような機能をまとめることで効力を発揮する

48

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

historia Inc.

【関数・マクロを活用する】

• マクロ使用の具体例

–フェード処理などで、フェードの開始直後と終了後のタイミングをどちらも取得したい場合に簡単に実装できる

49

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

historia Inc.

【マクロ使用の具体例】

フェード用マクロの中身

50

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

historia Inc.

【関数・マクロを活用する】

• 関数使用の具体例

–移動処理の機能を関数化して実装

51

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

historia Inc.

【関数使用の具体例】

派生先で移動処理の実装を専用のものに書き換える

52

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

historia Inc.

【関数使用の具体例】

もしくは派生先で、さらに専用の処理を追加する

53

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

historia Inc.

【関数使用の具体例】

54

関数を使用する側はどちらの実装なのか知る必要はない

ただ移動を行う機能という事だけ知っていれば良い

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

historia Inc.

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

ブループリントはすぐに汚くなるわけではありません。

少しずつ少しずつ汚れていき、

気がついたら大変な状態になる場合はよくあります。

55

三 三三/;:"ゝ 三三 f;:二iュ どうしてこんなになるまで放っておいたんだ!

三 _ゞ::.ニ! ,..'´ ̄`ヽノン/.;: .:}^( <;:::::i:::::::.::: :}:} 三三〈::::.´ .:;.へに)二/.::i :::::::,.イ ト ヽ__,へ;:ヾ-、ll__/.:::::、:::::f=ー‘==、`ー-=“⌒ヽ ←ブループリント

. 〈::ミ/;;;iー゙ii====|:::::::.` Y ̄ ̄ ̄,.シ'=llー一'";;;ド'};;;};;;;;! ̄ll ̄ ̄|:::::::::.ヽ\-‐'"´ ̄ ̄ll

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

historia Inc.

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

56

これらを上手く活用し、見やすいブループリントを書くよう心掛けましょう!

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

historia Inc.

おわり

57

ご清聴ありがとうございました