妹でもわかるUnrealEngine4

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

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

OpenAssetOrgのアセットで2Dゲームを作る(15) 指定範囲内の角度の時だけ有効なプログラム

f:id:una_unagi:20170112225744p:plain

「いままでは全方向に射撃出来てたけど、基本的に横にしか撃てないようにしたいので、そういう感じの仕組みにした。ただ角度となるとちょっと難しい」

妹「そういうノードなかったっけ? clampだったかな、あれで角度が指定した範囲内になるようにすればいいのでは?」

「そういう普通のノードは角度の計算に向いてないんだよ。例えば180と-180とか、数字では全然違うけど、角度だと考えると同じになっちゃうでしょ? 0度を正面とした時に後ろ向いた状態だから」

妹「じゃあ駄目なのか」

「状況次第ではそれでいけちゃうこともあるんだけど、基本的に角度を計算する時は角度専用のノードを使った方がいい。変なバグが出にくい」

historia.co.jp

「だいたいこの記事に載ってるノードを駆使すればなんとかなる。で、色々眺めてみたけっか、今回はEqualノード、つまりRotator用の==ノードを使うことにした」

f:id:una_unagi:20170112231005p:plain

「角度の==には、どれぐらいまでを同じ角度だと考えるかを設定するfloat値があるから、そこに70.0をいれた変数のピンを繋いである。これで正面から上下70°までは正面と一致してると判定出来る」

妹「そんなの70度も違ったらもう角度が一致してる言わないのでは……」

「そうなんだけど計算上はこれでいける。今まではマウスカーソルに向かう角度がわかったら即発射してたのを、角度が範囲内かどうか調べてから発射するようにした。理想としてはclampみたいに範囲外の場合も、ギリギリ範囲内に補正してほしかったんだけど、そういうノードなさそうだった」

妹「なんで無いんだろ?」

「3Dだと難しいからかなあ、2Dに限定すればシンプルなんだけど。一応やろうと思えば方法はある。徐々に回転させてみて範囲オーバーした時点で止めるとか、上限と下限との差を調べて近い方に合わせるとか。ただ今回はこの方が仕様的に良さそうだったので、範囲外のクリックは無視したままになってる」