И так... Не так давно задал вопрос, который пришлось всё-таки решать самому. Тут у меня даже нет предположений, поскольку с такой штукой работаю в первый раз. Суть такова - мой игрок меняет вращение по X и Z при изменении угла поверхности (IK я пробовал использовать, но не чем хорошим это не закончилось). Когда поднимаешься в горку - всё просто отлично, ну а когда спускаешься - в целом нечего не меняется вообще, да вот только результат меня не устраивает. В общем я видео внизу оставлю, там собственно сами можете всё увидеть. Также приложу часть кода (Весь скрипт выкладывать нету смысла потому что 362 строки). Буду очень благодарен за помощь!
Само видео
Код
RaycastHit normal;
if (Physics.Raycast(new Ray(transform.position + new Vector3(0,0.5f,0),Vector3.down),out normal, 1))
{
Vector3 vec = new Vector3(0, -normal.normal.z,normal.normal.y);
bodyAngle.rotation = Quaternion.LookRotation(vec);
bodyRotation = bodyAngle.eulerAngles;
transform.eulerAngles = new Vector3(Mathf.LerpAngle(transform.eulerAngles.x,bodyAngle.rotation.x * Mathf.Rad2Deg * 1.2f,10 * Time.deltaTime),transform.eulerAngles.y,Mathf.LerpAngle(transform.eulerAngles.z,bodyAngle.rotation.z * Mathf.Rad2Deg * 1.2f,10 * Time.deltaTime));
}
З.Ы - Сразу отвечу, почему я умножаю угл на 1.2. Это корректировка. Без неё персонаж меняет положение, но не ровно под поверхность