Unity Rotate Player в свободном падении не работает - PullRequest
0 голосов
/ 26 апреля 2018

У меня есть игрок, который запускает с рампы.Все отлично работает до этого момента.

Когда игрок выходит из рампы, он смотрит немного вверх, поэтому я пытаюсь плавно изменить вращение игрока (X, Y, Z);от текущего к новому.

мне всегда нужно y = -180

мне всегда нужно z = 0

мне нужно x = (MinAngle, MaxAngle) -> Может быть, эти значения (-30, 30)

Причина X (MinAngle, MaxAngle)

Я пытаюсь понять, как вращать игрока на определенной оси плавнои остановитесь под определенным углом, чтобы его можно было применить здесь и, возможно, с помощью кнопок игрока (вверх / вниз)

Линия transform.rotation вызывает проблему

rotCur = Quaternion.FromToRotation(transform.up, hit.normal) * transform.rotation;

transform.rotation = Quaternion.Lerp(Quaternion.Euler(30,-180,0), rotCur, Time.deltaTime * 5);

1 Ответ

0 голосов
/ 26 апреля 2018

в чем именно твоя проблема?Вы только сказали, что это «не работает» - но что именно происходит?

Вы пробовали это:

transform.rotation = Quaternion.Lerp(rotCur, Quaternion.Euler(30,-180,0), Time.deltaTime * 5);

первый и второй параметры поменялись местами

iПредположим, что rotCur означает «текущее вращение», а в Quaternion.Lerp первый параметр - «от», второй - «на»

РЕДАКТИРОВАТЬ: вы пробовали это:

transform.rotation = Quaternion.Lerp(transform.rotation, Quaternion.Euler(30,-180,0), Time.deltaTime * 5);

РЕДАКТИРОВАТЬ2: я знаю, в чем ваша проблема!

вы используете Time.deltaTime вместо Time.time (или любого другого таймера)

deltaTime никогда не равно 0 или 1 - оно всегда одинаково, 0,2 например

lerp интерполирует между 0 и 1, и вам нужно увеличить параметр с 0 до 1, чтобы он работал

попробуйте это:

в начале,только один раз:

float interpolationProgress = 0.0f;
bool interpolating = true;

, затем каждый кадр:

if(interpolating) {
    interpolationProgress += 0.1f * Time.deltaTime;
    transform.rotation = Quaternion.Lerp(from, to, interpolationProgress);
    if(interpolationProgress >= 1.0f) {
        interpolating = false;
    }
}
...