妹でもわかるUnrealEngine4

毎日更新? 妹に説明するために書いてるけど、たまにわかってない場合もあるUnrealEngine4を中心としたゲーム制作の話。略すとイモリアル

毎日更新? 妹に説明するために書いてるけど、たまにわかってない場合もあるUnrealEngine4を中心としたゲーム制作の話。略すとイモリアル

妹、参照がなんなのかわからない

妹「UE4の参照っていうのは、C++の参照と関係あるのか? ポインタとかアドレスとかの」

「関係ある。ブループリンタで出てくる参照はポインタの話。リファレンスというのも同じ」

妹「じゃあやっぱりポインタなのか」

「実体と参照が別の扱いになっていて、他から参照されてる実体を変更したり削除したりすると、参照してる方の動作が変わる。UE4に限らず参照という言葉が使われてるのはだいたいこれ」

妹「参照される側は実体というのか?」

「いや参照はだいたい参照って言うんだけど、参照される側の呼び方は特に決まってない。色々ある。数字とか座標とかだったら値(あたい)が呼ぶことも多いし、でもマテリアルを値とは言わないから実体かなと思うし、他のファイルを参照してることを言う場合は普通にファイルって言うだろうし」

妹「じゃあUE4で使いそうな参照を教えてくれ」

f:id:una_unagi:20150604010413p:plain

「1つ目はブループリント上での参照。レベルブループリントにアクターをドラッグすると、アクターのデータを調べたり変更したり出来る。コリジョンの接触イベントにくっついてるアクターのパラメータも参照だね」

妹「それは参照じゃなくて実体を使うと駄目なのか?」

「駄目じゃないけど、参照じゃなく実体をコピーする、つまりアクターの実体をコピーすると、アクターが2つに増えてしまう」

妹「でも増やしたいしたい時もあるんじゃない?」

「その時は参照じゃなくて、スポーンさせるノードの方を使う。前に弾の発射をするのに使ってたでしょ。弾を参照で作ったとすると、弾を撃とうとするたびに前に撃った弾が手元に戻ってくる。参照をいくら増やしても弾の実体は1つだから」

妹「増える時はコピーで、増やさない時は参照すればいいのか」

「そんな感じ」

妹「あと時々ノードの上にカーソル置くと、リファレンスとか出るんだけど、あれは参照してるって意味でいいの?」

「参照してるって意味でいい。自分で構造体とかクラスとか作れるようになると、参照型にするか値型(あたいがた)にするか悩む場面も出てくるけど、それはまだやってないと思う」

妹「参照型? なんかさらっと新しい単語が出てきたような」

「変数がもってる型の種類の話。変数に代入した……ブループリントで言うと、ノード同士を線で繋いだときのあつかいが違う。型については知ってたよね?」

妹「整数型とか?」

「そうそう。整数型や小数型は値型に分類される。アクターやマテリアルは参照型。値型は値そのものをコピーするから、変更しても元のデータに影響がない。参照型は参照をコピーするから変更すると元のデータに影響する。読み込みだけならどっちでも一緒」

妹「どっちか見分ける方法は?」

「大雑把に言えば、基本的なデータは値型で、複雑なデータは参照型になってる事が多いけど、見分けられないときはノードのカーソルを上に置いて、参照型かどうか見るしかないと思う」

妹「見分けられそうな気がしない……」

f:id:una_unagi:20150604010418p:plain

「2つ目はアセットの参照。アセットを作る時に別のアセットを参照してる場合がある。図はコンテンツブラウザの※参照ビューワーで、2D版の水色人間が歩くアニメーションを開いたところ」 ※4.8からはリファレンスビューワー

妹「これは何を参照してるんだ?」

「パラパラアニメの1コマが独立したアセットになってて、それを参照して走るアニメーションが出来てる。コマごとのアセットを消したり変えたりすると、アニメーションも変わる」

妹「参照じゃなくコピーしたらいいのでは……」

「そういう構造にすると、ループの中で同じコマを繰り返したり、コマを他の動きを流用する時に、同じ画像データを複数にコピーしないといけなくなって、容量の無駄がある」

妹「どういう時に他のアセットを参照するの?」

「アクター1つ作るのにも、スタティンクメッシュ、マテリアル、テクスチャと、色んな物を参照してる。といってもそれを書き換える事はめったにないから、マテリアルの実体をいじるとソレ使ってるやつ全部の色が変わる……みたいな事を気をつけてればOK」

妹「だいたいわかったような、わかってないような。あ、弱い参照と強い参照ってのがあったと思うけどそれは?」

「なんでそんなの知ってるの……」

妹「いやよくは知らないけどC++の本に書いてあったんだよ」

「その分類で言うと全部弱い参照……かなあ? ちょっと自信ない。どこからも参照されなくなったアクターが自動で消えるという仕組みがないから、どっちでも一緒のような」

妹「わかったような、わからないような。あと関数もよくわからないんだけど。メソッドっていうのは関数と違うのか?」

「関数か……その話まですると長くなりそうだからまた明日」

※6/5 図の抜け落ちと記載ミスを修正