Я пытаюсь объяснить вам псевдо.
Синус и косинус в основном одинаковы, но смещены на 90 градусов.
То, что производит эта функция, равно -1 .. 1 число, что - 100% .. 100%
В основном вам нужно:
var _x,_y,_z; //original position
var deg; // 0..360
x = _x * sin(deg);
y = _y * cos(deg);
z = _z;
Это вращалось вокруг мира [0,0,0]
Если вы хотите вращаться вокруг другая ось
var a_x,a_y,a_z;
x = _x + a_x * sin(deg);
y = _y + a_y * cos(deg);
z = _z + a_z;
Самая большая клавиша для сохранения местоположения по умолчанию [_x, _y, _z] Не делайте эту ошибку
x = x * sin(deg);
Именно это матрица
_x _y _z
x [cos -sin 0]
y [sin cos 0]
z [0 0 1]
x = _x * cos(deg) + _y * -sin(deg) + _z * 0;
y = _x * sin(deg) + _y * cos(deg) + _z * 0;
z = _x * 0 + _y * 0 + _z * 1;
Посмотрите на 3d матрицу для вашей оси. https://en.wikipedia.org/wiki/Rotation_matrix#In_three_dimensions
Попробуйте что-нибудь подобное
void Update(Player player) {
_position = player.position;
mouseX = Input.GetAxis("Mouse X") * mouseSensitivity * Time.deltaTime;
mouseY = -(Input.GetAxis("Mouse Y") * mouseSensitivity * Time.deltaTime);
_delta_x = mouseX - _position.x;
_delta_y = mouseY - _position.y;
_delta_z = 0;
_rot_x = ClampAngle(mouseX, mouseY, -30f, 30f);
_rot_y = ClampAngle(mouseX, mouseY, -30f, 30f);
_rot_z = 0;
Vector3 position = new Vector3(_delta_x, _delta_y, _delta_z);
position = position.rotate (rot_x, rot_y, rot_z);
position = position.add(_position.x,_position.y,_position.z);
player.position = position;
}