###前提・実現したいこと
Unityで2Dゲームを作成しています。言語はC#です。
質問内容はUnityというより数学です。
ある円Bが発射点Pから射出され、移動している円Aに衝突します。
その衝突した位置が、円Aの進行方向に対して前半円部分なのか後半円部分なのかを判定したいです。
###発生している問題・エラーメッセージ
以下のソースコードで円Aと円Bの位置ベクトルからアークタンジェントを取り、それで得られたラジアンを角度に変換することで円Aと円Bの位置関係を計算しようと考えました。
これにより、変数rotに格納される値は0~360になりますので、
最終的には0~180なら円Aの前半円、181~360なら円Aの後半円に当たっていると判定しようとしていたのですが、rotの値をデバッグログで表示させてみたところ、期待する値とは全く異なる値が取れてしまい困っています。
###該当のソースコード
円Aの接触時処理OnCollisionEnter2D()の中で計算を行っています。
void OnCollisionEnter2D(Collision2D b){ //円Aの移動先と円Aを結ぶベクトルの正規化 Vector3 aDirection = (target.transform.position-this.transform.position).normalized; //円Bと発射点Pを結ぶベクトルの正規化 Vector3 bDirection = (b.transform.position - p.transform.position ).normalized; //角度の計算 double radian = Mathf.Atan2 (aDirection.y - bDirection.y , aDirection.x - bDirection.x); double rot = radian * 180 / Mathf.PI; rot = (rot + 360) % 360; //-π~πを0~2πへ変換 }
###試したこと
これまでの説明とやりたいことを絵にしてみました。
数学が苦手で調べながら進めているため、この考え方自体が間違っているという気がしています。
よろしくお願いします。
###補足情報(言語/FW/ツール等のバージョンなど)
Unity 5.4.1f1personal
C#
回答2件
あなたの回答
tips
プレビュー