using System.Collections; using System.Collections.Generic; using UnityEngine; //バスケで必要な計算処理を記述。1行で済ませたいので標準関数を使っているものでも書く [System.Serializable] public class Calculation : MonoBehaviour { public float TargetPosAngleZ(Vector3 referencePos, Vector3 moveTargetPos) { Vector3 v = referencePos += new Vector3(0, 0, 1); Vector3 rag = referencePos - moveTargetPos; float angle = Vector3.Angle(v, rag); Debug.Log("Angle = " + angle); //swich文内でマイナス判定があれば負の値にする if (moveTargetPos.x < referencePos.x) angle = -angle; return angle; } //ある位置から別の位置までの角度を求める(基準の位置、 求めたい角度の位置、 基準となる軸(文字)) public float TargetPosAngle(Vector3 referencePos, Vector3 moveTargetPos, char referenceAxis) { Vector3 v = Vector3.zero; bool isAnglePlus = true; switch (referenceAxis) { case 'x' : v = new Vector3(1, 0, 0); if (moveTargetPos.y < referencePos.y) isAnglePlus = false; break; case 'y' : v = new Vector3(0, 1, 0); if (moveTargetPos.z < referencePos.z) isAnglePlus = false; break; case 'z' : v = new Vector3(0, 0, 1); if (moveTargetPos.x < referencePos.x) isAnglePlus = false; break; default : Debug.Log("基準の軸の引数が['x','y','z']でないか、大文字になっています。"); break; } //基準とターゲットまでのベクトルを求め、そこから角度を求める v += referencePos; Vector3 rag = referencePos - moveTargetPos; float angle = Vector3.Angle(v, rag); Debug.Log("Angle = " + angle); //swich文内でマイナス判定があれば負の値にする if (!isAnglePlus) angle = -angle; return angle; } }