На кнопки Q и E назначен поворот камеры на 90 и -90 градусов
Камера на сцене состоит из холдера и камеры внутри него; жестко привязана к персонажу, следует за его движением (как в diablo, titan quest, grim dawn, etc) и вращается вокруг него.
Поворот по часовой (+90 градусов) работает корректно и поворачивается плавно, но когда я делаю поворот против часовой стрелки (-90 градусов): камера начинает дрыгаться, либо поворачивается слишком резко.
void Turning(){
Quaternion quatertion = transform.rotation;
Vector3 eulerAngle = new Vector3(0, quatertion.eulerAngles.y, 0);
if(rotationAngle - eulerAngle.y < 0.2f){
if(rotationAngle == 360){
rotationAngle = 0;
}
eulerAngle.y = rotationAngle;
isTurning = false;
} else {
eulerAngle.y = Mathf.Lerp(eulerAngle.y, rotationAngle, rotationStep * Time.deltaTime);
}
m_Compas.rotation = eulerAngle.y;
quatertion.eulerAngles = eulerAngle;
parentTran.rotation = quatertion;
}
Как доработать этот код?
Upd.1:
Хтоническая громадина, которая не работает
void Rotator(float val) {
rotationAngle += val;
Quaternion quatertion = transform.rotation;
Vector3 eulerAngle = new Vector3(0, quatertion.eulerAngles.y, 0);
if (rotationAngle > 0) {
if (rotationAngle - eulerAngle.y < 0.2f) {
if (rotationAngle == 360 || rotationAngle == -360) {
rotationAngle = 0;
}
eulerAngle.y = rotationAngle;
isTurning = false;
} else {
eulerAngle.y = Mathf.Lerp(eulerAngle.y, rotationAngle, rotationStep * Time.deltaTime);
}
}
else if (rotationAngle < 0) {
rotationAngle = 360 + rotationAngle;
if (rotationAngle - eulerAngle.y < 0.2f) {
if (rotationAngle == 360 || rotationAngle == -360) {
rotationAngle = 0;
}
eulerAngle.y = rotationAngle;
isTurning = false;
} else {
eulerAngle.y = Mathf.Lerp(Mathf.Abs(rotationAngle), eulerAngle.y, -rotationStep * Time.deltaTime);
}
}
m_Compas.rotation = eulerAngle.y;
quatertion.eulerAngles = eulerAngle;
parentTran.rotation = quatertion;
}
Текущее решение:
void Camera_Rotation() {
if (rotationAngle > 0) {
transform.RotateAround(targetGO.transform.position, Vector3.up, -rotationAmount);
rotationAngle -= rotationAmount;
}
if (rotationAngle < 0) {
transform.RotateAround(targetGO.transform.position, Vector3.up, rotationAmount);
rotationAngle += rotationAmount;
}
}