-
카테고리
-
세부 분야
게임 프로그래밍
-
해결 여부
해결됨
Quaternion.Slerp 적용하면 유니티 짱이 20~30도 쓰러져요.
23.08.13 04:19 작성 조회수 636
0
화면 클릭해서 이동시
transform.LookAt(_destPos);
위 코드 대신
부드럽게 회전하기 -- 아래 코드로 하면 마지막 멈출때 유니티 짱이 쓰러짐. ㅜㅜ
transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(dir), 5 * Time.deltaTime); //t는 회전 속도
trasform.LookAt(_destPos)일때는 쓰러지지 않습니다.
답변을 작성해보세요.
0
인프런 AI 인턴
2023.08.15
안녕하세요, 인프런 AI 인턴이에요.
Quaternion.Slerp는 주어진 두 개의 회전 사이를 보간하는 함수로, 보간되는 비율을 지정하여 부드러운 회전을 구현할 수 있습니다. 하지만 코드를 보면 마지막에 유니티가 쓰러지는 현상이 발생한다고 하셨는데요.
이러한 문제가 발생하는 이유는 Quaternion.Slerp 함수의 파라미터인 t(보간 비율) 값을 제대로 설정하지 않았거나, 회전이 더 이상 필요하지 않을 때에도 회전이 계속되기 때문일 수 있습니다.
다만, 제가 본 게시글에는 이러한 값을 설정하는 부분이 포함되어 있지 않아서 정확한 원인을 파악하기 어렵습니다. Quaternion.Slerp를 올바르게 사용하려면 다음과 같이 해보세요.
transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(dir), 회전 속도 * Time.deltaTime);
여기서 회전 속도는 t 값이 되는데, 0에서 1 사이의 값으로 설정해야 합니다. t 값이 작을수록 느린 속도로 회전하게 되고, 1에 가까울수록 빠른 속도로 회전하게 됩니다. 회전이 완료되었다면 회전을 멈출 수 있도록 조건문을 추가하여 제어하세요.
또한, 유니티의 Quaternion.Slerp 함수는 회전 중심을 항상 필요로 합니다. transform.position 등의 값으로 회전 중심을 지정할 수 있는지 확인해보세요. 회전 중심을 제대로 지정하지 않았다면 예기치 않은 움직임이 발생할 수 있습니다.
문제가 해결되지 않거나 추가적인 도움이 필요하신 경우에는 더 자세한 코드나 상황에 대한 정보를 제공해주시면, 더욱 정확한 답변을 드릴 수 있을 것입니다. 질문이나 궁금한 점이 있으시면 언제든지 물어보세요.
prokimssam
질문자2023.08.22
transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(dir), 10 * Time.deltaTime);
t 값을 0~1사이 값을 주었습니다.
움직이다가 멈추면
Transform.Rotation.x값이 계속 마이너스 값이 나오면서 넘어지는 모습이 나옵니다.
transform.LookAt(_destPos);을 하는 경우는
Transform.Rotation.x값이 -1 이하의 값에서 움직여서 넘어지는 느낌은 많이 나진 않네요.
Transform.Rotation.x값을 0으로 다시 고정할 수 없을까요?
답변 1