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

妹でもわかるUnrealEngine4

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

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

変数を増やすことで、似たプログラムを同じプログラムに変える

妹「ワールドマップのプログラムが出来てきたよ。移動のさせ方はまだ考え中だから瞬間移動だけど」

f:id:una_unagi:20150814231301g:plain

「その辺は演出の問題だから。とりあえず目的地を変えたり、追加したりというのがちゃんと出来る仕組みになってればOK」

f:id:una_unagi:20150814231355p:plain

「プログラム的にも問題なさそうに見える。けどもう少しノード整理しといた方が良さそう」

妹「うすうすそうなんじゃないかとは思ってたんだけど、でもこの場合最後のSetActorLocationのとこが違うから、最初から最後まで別れたままになってしまった」

「このプログラム、例えばこんな感じに書き換えることが出来る」

f:id:una_unagi:20150814231620p:plain

妹「あんまり違わないような……あれ? この目的地っていうの何? 作ったおぼえない」

「さっき追加した。処理の流れから言うと全然必要ない、余計な変数なんだけど、これを作ることによって後半部分のプログラムを整理できる。そもそもこのWASDのそれぞれを押した時に、何が違うかって事なんだけど……」

妹「押したボタンが違う」

「それはそうなんだけど、どの方向に行くか、どの変数の場所にSetActorLocationするかってのが違うんだよ。そしてそれ以外には違いがない。そういう時は違う部分を変数にして、それを使って整理すると上手くいく事が多いんだよ」

妹「あんまりノードの数は変わってないような」

「多少減ってはいるけど、変数を1つ追加してるし、数ではそんなに違わない。ただ前半部分を目的地変数に必要な情報をSETすること、後半部分を目的地変数に向かって移動させることに分割することができる」

妹「そうするとどんな良いことが?」

「同じ事を何度もやってるとミスが起きる。例えば変更前のプログラムだと、機能してないブランチがあった。一番上の以外Conditionに何もつながってない」

妹「あ、ほんとだ。移動中にも移動出来たら困るかと思って付けといたフラグだけど、今のところ瞬間移動で意味なかったから忘れてた」

「一本化する事でそういうのを防ぎやすくなるんだよ。何故か左方向だけ上手くいかないとかそういうの。移動もSetActorLocationだけならいいけど、もっと複雑に動かすと絶対めんどくさい事になる。あと移動先が空っぽの時に移動をキャンセルする処理も要るけど、後半部分に1度だけ書けば大丈夫。後半だけ別の関数に分ける事も出来る」

妹「ブループリントの本にはそういうの書いてなかった気がする」

「ブループリントというかプログラムの考え方の問題だからかな。ゲームとも直接は関係ないし」

妹「他にも多分整理出来てないとこはいっぱいありそうなんだけど、どこが整理出来てないのかがわからないんだなあ」

「基本的には似たようなこと何回も書いててうんざりすると思った時があやしい。慣れてくるとそうなる前に察知出来る。でもとりあえず書いてみるしかないね。整理出来る方法があったとしても、その方法をまだ知らなかったらどうしようもないし。10年ぐらい経ってから解決法に気付いたりもする」

妹「うーん、よくわからないので、ややこしくなったら兄に全てなんとかしてもらうことにする」