妹でもわかるUnrealEngine4

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

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

アクター同士の二次元距離を調べる

妹「前々回の話でさらっと流されてたんだけど、アクターの距離を調べるマクロを作ってあるんだよ。何回も使うし、ブループリントがごちゃごちゃするからこうした方がいいかと思って」

「あったよ。知ってる知ってる」

妹「いや知ってるとかじゃなくて、これでちゃんと距離は調べられてるのかということを聞いてるんだよ」

f:id:una_unagi:20151219231422p:plain

「大丈夫じゃないかな。2点間の距離の公式をブループリントで書いてあるんでしょ?」

妹「そう……だと思うんだけど、自分でも何を書いてるのかいまいちよくわからないところがあって……一応奥行きはこの場合無視して、見た目の縦と横をああしてこうすればいいのかなあ、という気持ちなんだけど」

「それでいいと思うよ。このゲームの場合Yは重ねあわせ順とか当たり判定とかで使ってるだけだから、そこを含めた三次元座標で判定してもかえっておかしな事になるし。式はむずかしくてよくわからない場合は、もっと簡単な式に変えてもいい」

f:id:una_unagi:20151219231836p:plain

「これでも距離はわかる。ただし斜め方向の距離が実際より長めに出ちゃう欠点はあるけど」

妹「実際と違ったら駄目なのでは……」

「違うというか、要するに縦に何cm、横に何cmというのを単純に足してるんで、あるアクターからの距離をこれで計算すると、なんというか、ファイアーエムブレムの移動範囲みたいに菱型になる。ちゃんとした式でやると戦場のヴァルキュリアの移動範囲みたいに丸くなる」

妹「やっぱりちゃんとした方がいいのでは……」

「そうなんだけど、ゲームの仕様によってはわざとこうすることもある。昔のゲームみたいにカクカク動いてるのに距離だけ正確になったらむしろ変なこともあるから。計算が速いってのもあるはずだけど、今のパソコンだと違いを調べる方が難しいレベルだった」

妹「まあちゃんと動いてそうならそれでいいんだよ」

「あとはマクロをアクターに直接作らずに、ブループリントマクロライブラリで作った方がいいかもしれない」

f:id:una_unagi:20151219233331p:plain

「これでActorから使えるようにしておけば、Actorを継承したどのクラスからでも呼び出せるから」

妹「でもここ以外の場所で使う予定ないんだけど」

「距離を調べるとかはなんだかんだで使うものだから、そのうち要るようになると思うよ。主人公クラスの変数が必要なマクロとかでもないし。他にも自分用マクロを足していくとどんどん便利になるし、別のプロジェクトでの再利用もしやすい」