読者です 読者をやめる 読者になる 読者になる

妹でもわかるUnrealEngine4

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

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

ブループリントからコンポーネントを追加する時の内容設定

妹「昨日のやつ作っててちょっと謎だったのが、1列目のスプライトは何も設定しなくても表示されるけど、2列目のはSetSpriteで中身を指定しないと絵がでなかった。一体どういう違いがあるのか」

「1列目用のPaperSpriteComponentを追加ノードには、ノードの詳細プロパティで地面の絵が設定してあったけど、2列目のはそうなってなかったから。そういう違いがある。設定してある方は名前が出るからわかりやすい」

f:id:una_unagi:20160323163520p:plain
※いったんブループリントのウィンドウを開き直すかプレイボタンを押さないと、画像名が反映されない(バージョン4.10で確認)

妹「そんな設定した記憶がまったくない……」

「最初から1つ置いてあったスプライトの設定と混同したのかも。基本的に設定内容はエディタ上で追加したコンポーネントを選択した時と同じだから。スプライトの設定以外にも拡大縮小とか、回転とか、その他諸々のパラメータも設定できる。PaperSpriteComponentだけじゃなくどのコンポーネントでも同じみたいだった」

妹「じゃあそこで設定しちゃえばSetSpriteはなくてもよかったのか」

「画像が違う場合はノード上でわかるけど、他のパラメータの場合ブループリントだけ見てもわからないというのはちょっと困る。他のノードでも時々そういうのがあるんだけど。見た目同じなのに動作が違うというのは混乱の原因になりやすい。別ノードで設定するか、コメントで"2倍に拡大する"とか、詳細を見なくてもわかるようになってた方がいいと思う」

妹「昨日兄が作ってた改良型のブループリントではSetSprite使ってたけど、あれもそういう理由?」

f:id:una_unagi:20160323164616p:plain

「これはまた別の意図があって、コンポーネントを追加するノードを2つに分けると、その後の座標設定とかで使う水色のピンが2種類になっちゃうから、そうすると処理が共通化出来なくなるんだよ。分岐は絵の内容を変えたいだけで、他の処理は一緒だから、それで分岐する前にコンポーネントを作っておいた方がノードの数が少なくて済みそうだった」

妹「やってることはわかったけど、それを自分が作ってる時に思い出すのはむずかしそう」

「そこは経験だけど、妹もこのへんは無駄な気はするとか、だいぶ勘は身についてきてるし、あとはパズル感覚でノードが減らすとか、見た目スッキリとかを考えればいいと思う。今回のケースもこれがベストってわけじゃないし。コンポーネントの追加を2箇所にしたとしても、その後の処理を統一する方法はある」

  • 分岐を終わる直前にコンポーネントを変数にSET、分岐後の処理はその変数からGETしたものを使う
  • 分岐が終わった後の処理を別のイベントか関数にする

「他にも方法はあると思うけど、ぱっと思いついたのはこれぐらい。それと、前に作ったマクロもこういう場面で使うために考えた物。原理としては、上の2つの方法と似たようなもので、事前にマクロを準備するのがちょっと手間だけど、こまごましたことで変数とかイベントとか増やさなくて済むメリットがある」

imoue.hatenablog.com