• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

Translate() 와 로컬 좌표

21.06.03 23:46 작성 조회수 403

0

이해를 한 것 같은데 확인을 해주셨으면 해서요

        transform.position += Vector3.left * speed * Time.deltaTime;

        transform.Translate(Vector3.left * speed * Time.deltaTime);

위의 경우는 Vector3.left라고 왼쪽 방향으로 계속 벡터값을 더해주는데, 이걸 글로벌 좌표를 기준으로 더해주는거라서, 이 오브젝트가 어느 방향으로 바라보는지 관계 없이 무조건 왼쪽으로 이동이 된다고 말씀하시는 거죠?

아 그리고 OnBecameInvisible()이 SceneView의 카메라에도 반응 한다는거 언급 해주셨으면 합니다

좌표계 이해한다고 3d모드로 해놓고 실험하니까 Scene에서도 물체가 계속 보여서 사라지지 않더라고요

아래의 경우, Translate() 함수가 space.self라는 arugument때문에, Vector3.left의 방향 벡터가 로컬 좌표, 즉 해당 오브젝트가 바라보는 방향을 기준으로 적용이 되어서 곡선을 그리며 이동한다는 말씀이죠?

답변 1

답변을 작성해보세요.

0

안녕하세요. 답변드리겠습니다.

생각하시는 내용 맞습니다.

1. transform.position 이 월드 좌표계이고 Vector3.left 의 실제 값이 -1,0,0 입니다. 

그래서 다음코드가 월드좌표에서 왼쪽으로 이동하고요. 

        transform.position += Vector3.left * speed * Time.deltaTime;

2. 그리고 Translate 의 함수의 숨겨진 파라메터의 기본값이 Space.Self 이기 때문에

로컬좌표계의 왼쪽으로 이동합니다. Vector3.left 가 -1, 0, 0 이 므로 스피드와 델타타임을 곱해서 계산한 값은 로컬좌표계의 이동거리입니다. (시간 * 속도 * 방향 = 방향을 가지는 이동거리)

좌표계 자체가 로컬좌표계로 계산되기에 Vector3.left 가 -1, 0, 0 이라는 것은 로컬좌표계의 left 라고 처리되는 것입니다.

그래서 Traslate 는 이동거리를 받는 함수입니다. (Time.deltaTime 을 넣어줘야 하지만요.)

3. 카메라에서 빠져나가면 사라지는 내용은 OnBecameInvisible 이 원래 그렇게 동작합니다. 강의를 살펴보니 화면이라고 말씀드렸는데 게임화면이 아니라 카메라에서 보여주는 화면이 맞습니다.  정확히 말하면 게임화면이 아니라 씬뷰의 화면이라고 하면 되겠네요. 나중에 아래에 설명 텍스트를 하나 추가하겠습니다. 

이전 강의의 발사체 부분에서 API 를 보여드리는 화면이 있는데 언급하지는 않았지만 이렇게 보여드렸습니다. 

감사합니다.