「EnDlEss DREamER」ブログ

最近はunity5メインで活動中。以前はツクールRGSSネタなど。

§ 入射角の処理

弾の入射角のアルゴリズムやっとできた???




            //2点間の角度を取得(弾丸初期位置と弾丸接触座標)
            var target = initial_position - transform.position ;
            //レイで得た衝突面から射線ベクトルによる角度。鋭角(90度以下)で衝突面との角度算出。
            Vector3 desiredMove = Quaternion.Euler(0, -90, 0) * rhit.normal;
            //Quaternion.EulerでY軸中心に手前へ90°回転させてZ軸方向から横方向へのベクトルに変換。
            //まずは、弾丸接触面の法線からY軸に90°曲がった線をベクトルにAngleで角度取得
            float angle = Vector3.Angle(target, desiredMove);
            //角度が鈍角なら180から引いて90°以下で表示させる。
            if (angle > 90.0f) { angle = 180.0f - angle; }


このソースはOnCollisionEnter内で処理しているよ。

initial_positionは弾の初期座標。
transform.position は弾の接触時の座標。
rhitはinitial_position作成時に一緒にレイを飛ばしてRaycastHitを格納する。

targetで初期座標と接触座標からベクトル算出。
desiredMoveはrhitでゲットした面情報normalを使い、クォータニオンのオイラー角でY軸を中心に
90°回転した方向のベクトルを取得。
これにより、接触面に垂直な法線ではなく、面に平行なベクトルを得る。
targetとdesiredMoveを使い、Vector3.Angleで角度算出。
最後に鈍角を鋭角にして終わり!


ちょっと試した感じでは、いい感じの値が出たのでこれで入射角をはOKかな
避弾経始はまた別の話だけど。



2017/06/13/Tue 10:36:59  unity/CM:0/TB:0/
MAIN
copyright © 2006 「EnDlEss DREamER」ブログ. All Rights Reserved.
Template by TAE-3rd☆テンプレート工房