注:该组件用于计算约束后的向量及欧拉角,可用于炮塔,相机等...角度和位移的限制,个人将其嵌在“电机”上使用
查看:MyComponent_PositionMachine虚拟位置电机
查看:MyComponent_RotationMachine虚拟旋转电机
查看:MyTool_Static.EulerAngleConversion欧拉角,角度转换计算
/// <summary>
/// 向量\欧拉角约束器
/// </summary>
public class MyComponent_Vector3Constraint : MonoBehaviour {
public bool Constraint_X = true;
public bool Constraint_Y = true;
public bool Constraint_Z = true;
/// <summary>
///向量\欧拉角约束最大值
/// </summary>
public Vector3 Limit_Vector3_Max;
/// <summary>
/// 向量\欧拉角约束最小值
/// </summary>
public Vector3 Limit_Vector3_Min;
/// <summary>
/// 约束器重置
/// </summary>
/// <param name="Limit_Vector3_Min">向量\欧拉角约束最小值</param>
/// <param name="Limit_Vector3_Max">向量\欧拉角约束最大值</param>
public void Constraint_Reset(Vector3 Limit_Vector3_Min, Vector3 Limit_Vector3_Max){
this.Limit_Vector3_Min = Limit_Vector3_Min;
this.Limit_Vector3_Max = Limit_Vector3_Max;
}
/// <summary>
/// 角度约束器(0~360)
/// </summary>
/// <param name="EulerAngles">要约束的欧拉角</param>
/// <returns>retuen : 约束后转换成 0~360 的欧拉角</returns>
public Vector3 Constraints_EulerAngle_P360(Vector3 EulerAngles){
EulerAngles = MyTool.Static.EulerAngleConversion.EulerAngles_PN_To_PN180(EulerAngles);//正负无限转换成正负180度
EulerAngles = Constraints_Vector3(EulerAngles);//约束方法
EulerAngles = MyTool.Static.EulerAngleConversion.EulerAngles_PN_To_P360(EulerAngles);//转换成正360度
return EulerAngles;//最终返回
}
/// <summary>
/// 角度约束器(正负0~180)
/// </summary>
/// <param name="EulerAngles">要约束的欧拉角</param>
/// <returns>return : 约束后转换成 正负0~180 的欧拉角</returns>
public Vector3 Constraints_EulerAngle_PN180(Vector3 EulerAngles){
EulerAngles = MyTool.Static.EulerAngleConversion.EulerAngles_PN_To_PN180(EulerAngles);//正负无限转换成正负180度
EulerAngles = Constraints_Vector3(EulerAngles);//约束
return EulerAngles;//最终返回
}
/// <summary>
/// 向量约束器
/// </summary>
/// <param name="Vector">要约束的向量</param>
/// <returns>return :约束后的向量</returns>
public Vector3 Constraints_Vector3(Vector3 Vector){
if(Constraint_X)Vector.x = Mathf.Clamp(Vector.x,Limit_Vector3_Min.x,Limit_Vector3_Max.x);
if(Constraint_Y)Vector.y = Mathf.Clamp(Vector.y,Limit_Vector3_Min.y,Limit_Vector3_Max.y);
if(Constraint_Z)Vector.z = Mathf.Clamp(Vector.z,Limit_Vector3_Min.z,Limit_Vector3_Max.z);
return Vector;//最终返回
}
}