- Quaternion qa;
- public void RotateQ(){
- var v = Input.GetAxis ("Mouse X");
- var h = Input.GetAxis ("Mouse Y");
- qa *= Quaternion.Euler (h,v,0);
- qa = ClampX (qa,-30f,30f);
- qa = ClampY (qa,-30f,30f);
- this.transform.localRotation = qa;
- //限定不让Z轴旋转
- transform.eulerAngles = Vector3.right * transform.eulerAngles.x + Vector3.up * transform.eulerAngles.y + Vector3.forward * 0f;
- }
- /// <summary>
- /// 限定X轴旋转角度
- /// </summary>
- /// <returns>The x.</returns>
- /// <param name="q">Q.</param>
- /// <param name="min">Minimum.</param>
- /// <param name="max">Max.</param>
- Quaternion ClampX(Quaternion q,float min,float max){
- q.x /= q.w;
- q.y /= q.w;
- q.z /= q.w;
- q.w = 1.0f;
- float angleX = 2.0 * Mathf.Rad2Deg * Mathf.Atan (q.x);
- angleX = Mathf.Clamp (angleX,min,max);
- q.x = Mathf.Tan (0.5f*Mathf.Deg2Rad*angleX);
- return q;
- }
- /// <summary>
- /// 限定Y轴旋转角度
- /// </summary>
- /// <returns>The x.</returns>
- /// <param name="q">Q.</param>
- /// <param name="min">Minimum.</param>
- /// <param name="max">Max.</param>
- Quaternion ClampX(Quaternion q,float min,float max){
- q.x /= q.w;
- q.y /= q.w;
- q.z /= q.w;
- q.w = 1.0f;
- float angleY = 2.0 * Mathf.Rad2Deg * Mathf.Atan (q.y);
- angleY = Mathf.Clamp (angleY,min,max);
- q.y = Mathf.Tan (0.5f*Mathf.Deg2Rad*angleY);
- return q;
- }
Unity3d Quaternion角度限制
最新推荐文章于 2023-09-28 21:50:42 发布