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

prokimssam님의 프로필 이미지
prokimssam

작성한 질문수

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

Camera #3

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

작성

·

873

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

 

prokimssam님의 프로필 이미지
prokimssam

작성한 질문수

질문하기