강의

멘토링

로드맵

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

강아지호빵찐빵님의 프로필 이미지
강아지호빵찐빵

작성한 질문수

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

Rotation

궁금한 게 있습니다.

작성

·

301

0

1. 작성하신 코드를 보면 Quaternion.Slerp를 사용할 때 따로 transform.rotation에 넣어서 사용하셨는데 transform.Translate처럼 그냥 바로 사용할 순 없나요? 없다면 이유가 뭔지 궁금합니다.

2. transform.position += Vector3.forward * Time.deltaTime * _speed;

위 코드에서 transform.position은 월드 좌표이고 Vector3.forward는 로컬 좌표인데 왜 월드 좌표로 전환하지 않고도 바로 사용할 수 있는 건가요?

퀴즈

56%나 틀려요. 한번 도전해보세요!

게임 오브젝트의 이동 계산 시 Time.deltaTime 값을 곱해주는 주된 이유는 무엇일까요?

캐릭터의 최대 이동 속도를 제한하기 위해

모든 컴퓨터에서 초당 이동 거리를 일정하게 유지하기 위해

물리 엔진 계산의 정확도를 높이기 위해

오브젝트의 회전 상태에 따라 이동 방향을 결정하기 위해

답변 1

0

Rookiss님의 프로필 이미지
Rookiss
지식공유자

1.
이동 함수는 굉장히 다양하고, 어떤걸 어떻게 이용하더라도 결과가 동일하게 나오면 됩니다.
Rotate 계열 함수로도 회전을 할 수 있기는 한데,
현 상황에서는 [특정 키를 누르면 특정 지정 방향으로 바라보고 멈춰있기]를 바랍니다.
그런데 바로 해당 방향을 쳐다보게 하면 어색하기 때문에,
최대한 스르륵 회전하면서 해당 방향에 안착하게 만들고 싶은 것이죠.
Slerp는 Sphere Interpolate의 약자로 [구면 보간]을 의미하는데
보간이란 [두 값을 적당히 석어 주는] 것으로 생각하시면 됩니다.
[현재 값] 과 [최종 목적 값] 을 건내주고 둘 사이의 값으로 설정해서
스르륵 고개를 돌리는 효과를 만든 것이죠.
반면 이동은 그런거 없이 그냥 원하는 방향으로 쭉 이동만 하면 되는 것이니
해당 방향으로 position을 더해주거나 Translate을 해주면 바로 끝납니다.

2.
Vector.forward는 딱히 로컬 좌표가 아닙니다.
말 그대로 (0,0,1)이라는 벡터를 나타내는 것이기 때문에
월드 좌표인 position에 그대로 더해주면 월드 좌표를 0,0,1 방향으로 늘리라는 얘기가 됩니다.

강아지호빵찐빵님의 프로필 이미지
강아지호빵찐빵

작성한 질문수

질문하기