出張ヒストリア ブループリントを書くにあたって大切なこと
TRANSCRIPT
historia Inc.
自己紹介
株式会社ヒストリア
馬場俊行
プログラマー/レベルデザイナー
業界歴8年目
UE3歴約3年(コンシューマー、アーケード、モバイル)
UE4歴約2年(コンシューマー、モバイル)
2
historia Inc.
【ブループリントとは?】
• 特別なアセットで、アクタの種類を新規作成するために使う直観的かつノードベースのインターフェース
• デザイナーおよびゲームプレイプログラマーは、 新しくコードを書かなくても、アンリアル エディタからゲームプレイの作成およびイタレーションをすぐに実行することができる
出典:アンリアルエンジン4のドキュメントブループリント入門
4
historia Inc.
【ブループリントとは?】
• そんな事は知っている!
• もうある程度ブループリントは書ける
• ノードをガシガシ繋げていけばいいんでしょ?
今回はそんな人を対象に、一歩踏み込んだ内容です
5
historia Inc.
【ブループリントを書くにあたって大切なこと】
• 実行ルートがあっちこっちに迷走している
–流れがわかりにくい
• ルート同士が交差していたりノードと重なっている
–ピンがどこに接続されているのかわからない
• ノードとノードの距離が近すぎる
–全体的に見えにくい
• コメントが一切無い
–何をやっているかよくわからない
10
historia Inc.
【ブループリントを書くにあたって大切なこと】
• ソースコードの可読性以上に視認性の重要さは大きい
• ノードを綺麗に整理することは見た目以上に保守のしやすさに気づく
• 特に大人数による開発では絶対的な正義となる
11
historia Inc.
【ノードの配置を整理して処理の流れを見やすくする】
• ノード同士の距離はある程度離す
–ノードの大きさはアクター名や関数名の変更、
引数の追加などである程度変化する
–エディタの言語設定を変更してもノードの大きさは変わる
17
言語を切り替えてもノードの大きさを変えない設定があるので活用
historia Inc.
【ノードの配置を整理して処理の流れを見やすくする】
• ノード同士の距離はある程度離す
とはいえ、離れすぎると今度は
全体を把握しづらくなるので注意18
ノード同士の間隔は、ある程度余裕をもって!
historia Inc.
【ノードの配置を整理して処理の流れを見やすくする】
ここでブループリント小話を一つ……
「この処理の間にこの処理を入れてください」
「他のノード動かすのメンドクサイお」
「ノードとノードの間に無理やり入れるお」
「入りきれないからこの辺に置いておくお」
19
∧_∧( ゚ω゚ ) ノード配置は任せろー
バリバリC□l丶l丶/ ( ) やめて!(ノ と、 i
しーJ
historia Inc.
【ノードの配置を整理して処理の流れを見やすくする】
「どうせまた後で修正が入るかも」
「とりあえずの仮処理かもしれないし…」
その気持ち、すごくわかります!
とは言え、常に綺麗に保つことを心掛けましょう
–ノードは複数選択する事で簡単にまとめて移動できる
–後述するコメント枠を活用することで、枠単位で移動できる
ね、整理するのは簡単でしょ?
21
historia Inc.
【リルートノードを活用する】
リルートノードの作成自体はルート上でダブルクリックするだけで簡単に追加できる
26
右クリックからだと「AddRerouteNode」を選択すれば追加できる
historia Inc.
【コメントを活用する】
• コメントグループを使う
–複数ノードをまとめて囲う事で、関連処理が視覚的に分かる
–コメントグループを移動させると中身をまとめて移動できる
– EventGraph内で各イベントごとに囲うのも有効
28
historia Inc.
【コメントを活用する】
• ノードコメントを使う
–手軽にコメントを挿入することができる
–やりすぎると見にくくなる場合もある
–ちょっとしたメモ程度で使う感覚の方がよいかも
31
historia Inc.
【ブループリントを書くにあたって大切なこと】
• ノードの簡略化を活用する
–関数化やマクロ化する以外でもノードをまとめる事が可能
34
複数のノードを一つのノードにまとめる事ができる
historia Inc.
【整理する】
• これらの整理作業は、最初のうちはあまり必要ない
• 開発が進むにつれ、実装内容が増えてきた時に有効
• とくに開発後期になると大量のイベントや関数、マクロなどが増えるため、整理していると作業効率はよくなる
41
historia Inc.
【関数・マクロを活用する】
こんな事していませんか?「うーん、ここから先の処理の流れはこっちと一緒だな…」「よし、だったらここでこっちのノードに繋げて――」
「これで完成だ!」
43
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 \\ \ \\ || .||
.○○
historia Inc.
【関数・マクロを活用する】
それぞれで出来ること、できない事
47
入出力ピン Latentノード 継承先のクラス
関数 追加できない 使えない 呼び出せる(オーバーライドも可能)
マクロ 追加できる 使える 呼び出せない
historia Inc.
【関数・マクロを活用する】
• つまりどういうこと?
–マクロは、実行ピンを増減でき、処理待ち用のLatentノードが使えるため、処理の流れを簡潔にまとめることができる
–関数は、継承先でのクラスでも使用でき、中身の処理を継承先でも上書きできるため、同じような機能をまとめることで効力を発揮する
48
historia Inc.
【ブループリントを書くにあたって大切なこと】
ブループリントはすぐに汚くなるわけではありません。
少しずつ少しずつ汚れていき、
気がついたら大変な状態になる場合はよくあります。
55
三 三三/;:"ゝ 三三 f;:二iュ どうしてこんなになるまで放っておいたんだ!
三 _ゞ::.ニ! ,..'´ ̄`ヽノン/.;: .:}^( <;:::::i:::::::.::: :}:} 三三〈::::.´ .:;.へに)二/.::i :::::::,.イ ト ヽ__,へ;:ヾ-、ll__/.:::::、:::::f=ー‘==、`ー-=“⌒ヽ ←ブループリント
. 〈::ミ/;;;iー゙ii====|:::::::.` Y ̄ ̄ ̄,.シ'=llー一'";;;ド'};;;};;;;;! ̄ll ̄ ̄|:::::::::.ヽ\-‐'"´ ̄ ̄ll