妹でもわかるUnrealEngine4

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

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

ルーレットの作り方(8) 元の位置からどれだけ回転したか調べる

imoue.hatenablog.com

「ルーレット盤はだいたい良さそうなので、次は回転させてみて、今どの位置にあるかを調べる。針の方を動かすタイプのルーレットも作れるし、東京フレンドパークみたいにダーツっていう方法もあるけど、今回は針固定型のを考えてる」

f:id:una_unagi:20180616001745p:plain

「まず適当に回転してもらうために、RotatingMovemantを取り付け。RotatingRateに、ルーレット盤が回る軸と速度を指定する。最終的にはこれは使わなくなると思うけど、とりあえず回ってても針が指してる位置を取れるか? というのが問題で、回し方は今回気にしない」

f:id:una_unagi:20180616001807p:plain
TickでRotationを出力して、回転の角度を随時表示してもらう

f:id:una_unagi:20180616001430p:plain

「まずは普通にgetActorRotationで調べるんだけど、以前別のでやった、軸がひっくりかえる問題がおきる。その結果、どれか1つの軸だけ取り出しても上手くいかない]

妹「あー、それあったね。途中で回転しなくなるやつ」

「今回は回転はちゃんとしてるんだけど、内部の数字はやっぱり途中でひっくり返ってるんで使いにくい。次に内積を使って角度を調べるという、これもよく使われる方法を試す」

f:id:una_unagi:20180616002134p:plain
普通に内積を調べて表示

f:id:una_unagi:20180616002229p:plain

「これもいまいち。180度まではいいけど、その次が179度になって、どんどん減っていく。今回知りたいのは元の位置からどれだけの角度をずれてるかじゃなくて、時計回りに何度ズレてるか?だから。そうでないと90度ズレてるって言われた時に、どっち側のマス目に針が来てるのかわからない」

妹「時計周りじゃないと駄目なの?」

今回は時計回りに扇を増やしてるから。時計周りに1つ目、2つ目と設定してる。だから角度の計算も時計回りじゃないとズレちゃう」

※次の記事で説明しますが、逆でした

f:id:una_unagi:20180616002539p:plain
内積を使いつつ、ベクトルの値によっては180以上の値がでるように調整

f:id:una_unagi:20180616002548p:plain

「で、ちょっと不格好なんだけど、0~360度まで出るようにしたのがこれ。もっと簡単な方法があるかもしれないけど……」

妹「あるの?」

「それはわからないけど、思いつかないんだからしょうがない。とにかく元の位置からのズレが数字でわかれば方法はなんでもいい。それを分割数で割れば、どのマスに針が来てるかはわかる。ズレてない状態で0番のマス目を針が指してるのが大前提だけど。というかルーレット盤を回転させる角度を記録しておいて、360で割るとかの方が簡単そう。なんとなく針のチェックと回転の仕組みを別にしたかったんだけど、深い意味はないので……」

「最初は3回ぐらいで出来るかなと思ってたんだけど、実際やってみるとややこしい部分が結構あったり。でもあと2回か3回……か4回ぐらいで完成するはず」