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

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

작성한 질문수

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

Rotation

궁금한 게 있습니다.

작성

·

244

0

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

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

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

답변 1

0

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

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

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

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

작성한 질문수

질문하기