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

water_pokemon님의 프로필 이미지
water_pokemon

작성한 질문수

새싹부터 시작하는 Unity 게임 개발

캐릭터 이동 구현 (Transform Movement)

캐릭터 이동 구현 rotation 값 변경

해결된 질문

작성

·

87

·

수정됨

0

강의 자체에서는 Scale 값을 음수로 변경해서 캐릭터의 방향을 전환했는데 혼자서 rotation 값으로 방향 전환을 해보려다 실패해서 질문 남깁니다.

  • position : 오브젝트의 현재 위치

  • eulerAngles : 오브젝트의 회전 각도

  • localScale : 오브젝트의 크기

이 내용을 기반으로

if(Input.GetKey(KeyCode.RightArrow))
{

    transform.Translate(speed * Time.deltaTime, 0, 0);
    transform.eulerAngles= new Vector3(0f, 0f, 0f);

} else if (Input.GetKey(KeyCode.LeftArrow)) {
    transform.Translate(-speed * Time.deltaTime, 0, 0);
    transform.eulerAngles= new Vector3(0f, 180f, 0f);
}

 

코드를 이렇게 작성했는데 캐릭터 자체의 방향 전환만 되고

방향키대로 움직이지 않습니다.

Rotation 값으로 캐릭터의 방향 전환을 하려면 어떻게 코드를 수정해야 할까요?

답변 2

0

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

안녕하세요! 너무 늦게 답변드려 죄송합니다.

 

일단 기본적으로 'Tranlsate' 함수는 물체의 이동을 손쉽게 구현 할 수 있는 하나의 유니티 내장 함수라고 생각하시면 됩니다.

Translate는 기본적으로 로컬 좌표에서 동작을 하게 됩니다. 로컬 좌표라는 것은 캐릭터의 현재 회전 값에도 영향을 받기에, 회전이 반대편으로 되어 있다면 해당 캐릭터가 바라보는 방향이 설정이 되면서 -값을 곱해주셔도 캐릭터의 회전이 적용되어 앞으로 나아가는 현상이 생기게 됩니다.

 

좀 더 쉽게 설명드리면 Translate는 기본적으로 'Space.Self'라는 로컬 좌표이고, 캐릭터의 바라보는 방향에 영향을 받아서 캐릭터를 180도 회전을 시키면 바라보는 방향이 반대가 되면서 생기는 문제입니다.

 

이 경우 Translate를 월드 좌표로 변경을 해 주시면 됩니다.

image.png


Translate를 월드 좌표계로써 물체의 이동을 처리하시려면 함수 끝 부분에 ','와 함께 Space.World를 작성해주시면 되겠습니다.

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

감사합니다 해결됐습니다!

0

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

안녕하세요! 현재 제가 외부에있어서 내일 밤중으로 최대한 확인해보고 이유와, 해결 방안을 말씀드리겠습니다. 조금만 기다려주세요..!ㅠㅠ

water_pokemon님의 프로필 이미지
water_pokemon

작성한 질문수

질문하기