인프런 커뮤니티 질문&답변

prokimssam님의 프로필 이미지

작성한 질문수

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진

Camera #3

Quaternion.Slerp 적용하면 유니티 짱이 20~30도 쓰러져요.

작성

·

864

0

화면 클릭해서 이동시

transform.LookAt(_destPos);

위 코드 대신

부드럽게 회전하기 -- 아래 코드로 하면 마지막 멈출때 유니티 짱이 쓰러짐. ㅜㅜ
transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(dir), 5 * Time.deltaTime); //t는 회전 속도

 

trasform.LookAt(_destPos)일때는 쓰러지지 않습니다.

1.png

답변 2

0

콜라이더가 캡슐이라서 발생하는 문제라고 생각합니다.바닥과 충돌되면서 캐릭터가 기울더군요.

0

안녕하세요, 인프런 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님의 프로필 이미지
prokimssam
질문자

transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(dir), 10 * Time.deltaTime);

t 값을 0~1사이 값을 주었습니다.

움직이다가 멈추면
Transform.Rotation.x값이 계속 마이너스 값이 나오면서 넘어지는 모습이 나옵니다.

image

transform.LookAt(_destPos);을 하는 경우는
Transform.Rotation.x값이 -1 이하의 값에서 움직여서 넘어지는 느낌은 많이 나진 않네요.

 

Transform.Rotation.x값을 0으로 다시 고정할 수 없을까요?

prokimssam님의 프로필 이미지
prokimssam
질문자

다시 테스트 해보니 캐릭터와 먼 곳을 클릭하지 않고, 캐릭터를 클릭해서 멈추는 경우
유니티짱이 쓰러집니다.

prokimssam님의 프로필 이미지
prokimssam
질문자

너무 가까울때 클릭한 경우는 회전 하지 말라고 하니까 쓰러지는 문제가 해결이 되네요.

image