まず0を跨ぐ場合と、そうでない場合で2つの判定を作る
これをまとめる
更に三次元に対応させてみる
//0をまたぐ場合の判定 if ((Target < Min) || (Max < Target)) return true; return false; //通常の判定 if ((Max < Target) && (Target < Min)) return true; return false;
これをまとめる
public bool IsRange(float Target, float Min, float Max) { if(Max > Min)return IsRange_0Stride(Target, Min, Max); if ((Max < Target) && (Target < Min)) return true; return false; } public bool IsRange_0Stride(float Target, float Min, float Max) { if ((Target < Min) || (Max < Target)) return true; return false; }
更に三次元に対応させてみる
public void RestrictedSpin(Vector3 Angle, Vector3 Vec3Min, Vector3 Vec3Max, Space Type) { //座標と移動を加算した値 Vector3 Result = transform.localEulerAngles + Angle; if (IsRange(Result.x, Vec3Min.x, Vec3Max.x) == true) { transform.Rotate(Angle.x, 0, 0, Type); } if (IsRange(Result.y, Vec3Min.y, Vec3Max.y) == true) { transform.Rotate(0, Angle.y, 0, Type); } if (IsRange(Result.z, Vec3Min.z, Vec3Max.z) == true) { transform.Rotate(0, 0, Angle.z, Type); } }
コメントをかく