Синтаксис:
Используется csharp
public Transform obj;
float mouseSensetivity = 200f;
float angleX;
float angleY;
void FixedUpdate()
{
float inputMouseX = Input.GetAxis("Mouse X") * mouseSensetivity * Time.deltaTime;
float inputMouseY = Input.GetAxis("Mouse Y") * mouseSensetivity * Time.deltaTime;
angleX += inputMouseX;
angleY += inputMouseY;
obj.localRotation = Quaternion.AngleAxis(angleX, obj.up) * Quaternion.AngleAxis(angleY, Vector3.right);
}
float mouseSensetivity = 200f;
float angleX;
float angleY;
void FixedUpdate()
{
float inputMouseX = Input.GetAxis("Mouse X") * mouseSensetivity * Time.deltaTime;
float inputMouseY = Input.GetAxis("Mouse Y") * mouseSensetivity * Time.deltaTime;
angleX += inputMouseX;
angleY += inputMouseY;
obj.localRotation = Quaternion.AngleAxis(angleX, obj.up) * Quaternion.AngleAxis(angleY, Vector3.right);
}
С ограничителями то же самое:
Синтаксис:
Используется csharp
public Transform obj;
float mouseSensetivity = 200f;
float angleX;
float angleY;
void FixedUpdate()
{
float inputMouseX = Input.GetAxis("Mouse X") * mouseSensetivity * Time.deltaTime;
float inputMouseY = Input.GetAxis("Mouse Y") * mouseSensetivity * Time.deltaTime;
angleX = ClampAngle(angleX + inputMouseX, -90, 90);
angleY = ClampAngle(angleY - inputMouseY, -90, 90);
obj.localRotation = Quaternion.AngleAxis(angleX, obj.up) * Quaternion.AngleAxis(angleY, Vector3.right);
}
private float ClampAngle(float angle, float min, float max)
{
if (angle < -360) angle += 360;
if (angle > 360) angle -= 360;
return Mathf.Clamp(angle, min, max);
}
float mouseSensetivity = 200f;
float angleX;
float angleY;
void FixedUpdate()
{
float inputMouseX = Input.GetAxis("Mouse X") * mouseSensetivity * Time.deltaTime;
float inputMouseY = Input.GetAxis("Mouse Y") * mouseSensetivity * Time.deltaTime;
angleX = ClampAngle(angleX + inputMouseX, -90, 90);
angleY = ClampAngle(angleY - inputMouseY, -90, 90);
obj.localRotation = Quaternion.AngleAxis(angleX, obj.up) * Quaternion.AngleAxis(angleY, Vector3.right);
}
private float ClampAngle(float angle, float min, float max)
{
if (angle < -360) angle += 360;
if (angle > 360) angle -= 360;
return Mathf.Clamp(angle, min, max);
}
В главной строке:
obj.localRotation = Quaternion.AngleAxis(angleX, obj.up) * Quaternion.AngleAxis(angleY, Vector3.right);
как можно увидеть, по одной оси я вращаю в локальных координатах: angleX, obj.up , а в другой- в глобальных: angleY, Vector3.right. Впринципе, это ничего не меняет, если обе оси вращать в локальных obj.up и obj.right, будет колбасить в обоих направлениях.
Почему вращение не работает, как надо?