Ограничение поворота на обоих осях снято ( -360, 360 и -360, 360 по осям X & Y).
Если мышью повернуть обьекту Vector3.forward вертикально вверх или вниз строго на 90гр наблюдаем интересную картину - в таком положении он отказываеться вращаться по другой оси... а на близких углах к 90 резко сужаеться диапазон поворота.
Если повернуть обьект дальше до 180гр (вверх ногами) поворот по горизонтали вообще реверситься (начинает работать наоборот).
Если вторая проблема решима, можно менять по условию полярность градусов, то первую никак решить не удаеться...
Нужен поворот через голову (мертвая петля) но так чтоб сохранить горизонтальную маневренность поворота.
Есть идеи как тут выкрутиться? 3 дня вожусь уже, все методы перепробовал, результат нулевой, мертвая точка и все тут.
Код такой:
Синтаксис:
Используется javascript
var plrKurs : Transform;
var rotSpeed : int = 5;
var snstvX : float = 1.0;
var snstvY : float = 1.0;
var minX : float = -360.0;
var maxX : float = 360.0;
var minY : float = -360.0;
var maxY : float = 360.0;
private var rotX : float = 0.0;
private var rotY : float = 0.0;
private var rotZ : float = 0.0;
function Update () {
rotX += Input.GetAxis("Mouse X") * snstvX;
rotY += Input.GetAxis("Mouse Y") * snstvY;
plrKurs.rotation = Quaternion.AngleAxis (rotX, Vector3.up);
plrKurs.rotation *= Quaternion.AngleAxis (rotY, Vector3.left);
transform.rotation = Quaternion.Slerp (transform.rotation, plrKurs.rotation, rotSpeed * Time.deltaTime);
if (rotX < -360)
rotX += 360;
else if (rotX > 360)
rotX -= 360;
if (rotY < -360)
rotY += 360;
else if (rotY > 360)
rotY -= 360;
rotX = Mathf.Clamp (rotX, minX, maxX);
rotY = Mathf.Clamp (rotY, minY, maxY);
}
var rotSpeed : int = 5;
var snstvX : float = 1.0;
var snstvY : float = 1.0;
var minX : float = -360.0;
var maxX : float = 360.0;
var minY : float = -360.0;
var maxY : float = 360.0;
private var rotX : float = 0.0;
private var rotY : float = 0.0;
private var rotZ : float = 0.0;
function Update () {
rotX += Input.GetAxis("Mouse X") * snstvX;
rotY += Input.GetAxis("Mouse Y") * snstvY;
plrKurs.rotation = Quaternion.AngleAxis (rotX, Vector3.up);
plrKurs.rotation *= Quaternion.AngleAxis (rotY, Vector3.left);
transform.rotation = Quaternion.Slerp (transform.rotation, plrKurs.rotation, rotSpeed * Time.deltaTime);
if (rotX < -360)
rotX += 360;
else if (rotX > 360)
rotX -= 360;
if (rotY < -360)
rotY += 360;
else if (rotY > 360)
rotY -= 360;
rotX = Mathf.Clamp (rotX, minX, maxX);
rotY = Mathf.Clamp (rotY, minY, maxY);
}
Дема, посмотреть:
Скрытый текст: