ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 10장. 공간과 움직임
    Unity/레트로의 유니티 게임 프로그래밍 에센스 2020. 11. 11. 12:04

    <전역 공간, 오브젝트 공간, 지역 공간의 차이점>

    <좌표계의 종류>

    <부모-자식 관계>

    <회전과 평행이동>

     

    10.1 유니티 공간

        - 게임 월드는 하나지만 하나의 좌표계(공간)로는 게임 월드의 모든 속성을 표현할 수 없음.

        - 이후 설명할 전역 공간, 오브젝트 공간, 자식 공간은 하나의 게임 월드를 서로 다른 잣대로 관측하여 표현한 것.

        10.1.1 전역 공간

            - 월드의 중심이라는 절대 기준이 존재하는 공간. = 월드 공간(world space).

            - 전역 공간에서 X,Y,Z 방향을 정하고 그에 따라 좌표를 계산하는 기준을 전역 좌표계(global coordinate system).

            - 전역 공간에는 원점(0, 0, 0)이 존재하며 모든 오브젝트가 원점에서 얼마만큼 떨어져 있느냐가 오브젝트의 좌표가 됨

            - Pivot : 오브젝트의 실제 기준점으로 오브젝트 배치

            - Center : 눈에 보이는 오브젝트의 중심점을 기준으로 오브젝트 배치

     

        10.1.2 오브젝트 공간

            - 오브젝트의 방향을 기준으로 보는 좌표계. 오브젝트가 회전했다면 전역 공간과 방향이 달라짐.

            - local 공간을 뜻하는 건 아님.

     

        10.1.3 지역 공간

            - 부모 오브젝트가 존재하지 않으면 지역 좌표계와 전역 좌표계가 일치.

            - 지역 공간은 자신의 부모 오브젝트를 기준으로 하는 지역 좌표계로 좌표를 측정. 상대적인 좌표계

            - 인스펙터 창에 표시되는 (모든) 게임 오브젝트의 위치, 회전, 스케일은 모두 지역 공간에서 측정한 값.

            - 부모와 자식 사이의 (전역 좌표계로 측정한) 거리도 스케일의 영향을 받게됨.

            - 부모가 회전하면 자식은 부모를 중심으로 공전.

     

        10.1.4 지역 공간과 오브젝트 공간의 차이

            - 전역 공간 : 게임 월드의 원점을 기준으로 위치를 측정.

            - 지역 공간 : 자신의 부모 게임 오브젝트를 기준으로 위치를 측정

            - 오브젝트 공간 : 자기 자신을 기준으로 위치를 측정 -> 추가 이해 필요...

            - 지역 공간에서 앞쪽은 부모의 앞쪽. Local 모드(오브젝트 공간)에서 앞쪽은 해당 오브젝트의 앞쪽.

            - 지역 공간에서 위치, 회전, 스케일값 측정(인스펙터 창) : 부모 게임 오브젝트를 기준으로 측정(지역 공간)

            - 지역 공간에서 평행 이동 : 게임 오브젝트 자신의 방향을 기준으로 평행 이동(오브젝트 공간)

     

    10.2 오브젝트의 이동과 회전

        10.2.1 스크립트 작성하기

        10.2.2 위치화 회전 결정하기

        10.2.3 Update() 메서드 구현

        10.2.4 평행이동 (Transform.Translate())

            - parenttransform.Translate(new Vector3(0, 1, 0) * Time.deltaTime, Space.World); Translate()는 지역 공간을 기준으로함. 전역 공간으로 하기위해 두번째 파라미터로 Space타입을 받아서 전역 공간 기준으로 함.

            - Space.World 전역 공간, Space.Self 지역 공간

        10.2.5 회전 (Transform.Rotate())

            - parenttransform.Rotate(new Vector(0, 0, 180) * Time.deltaTime, SpaceWorld);

        10.2.6 테스트

     

    10.3 벡터 연산으로 평행이동 구현하기

        10.3.1 벡터의 속기

            - 미리 만들어진 편리한 변수. up, down, forward, back, left, right -> 크기가 1인 방향 벡터(전역 공간).

                Vector3 position = Vector3.up;

                Vector3 position = new Vector3(0, 1, 0);

     

        10.3.2 트랜스폼의 방향

            - transform.forward : 자신의 앞쪽을 가리키는 방향벡터(지역 공간)

            - transform.right

            - transform.up

            - 다른 방향은 없음 -> -1을 곱해서 나타냄.

     

        10.3.3 벡터 연산으로 평행이동

            - 자신의 앞쪽으로 평행이동

                transform.position = transform.position + transform.up*1;

                transform.Translate(new Vector3(0, 1, 0));

            - 전역 공간 앞쪽으로 평행이동

                transform.position = transform.position + Vector3.up*1;

                transform.Translate(new Vector(0, 1, 0), Space.World);

     

    10.4 마치며

        - 전역 공간은 게임 월드를 기준

        - 지역 공간은 부모 게임 오브젝트를 기준(방향을 제외한 것들)

        - 오브젝트 공간은 자기 자신을 기준(방향과 그에 따른 평행이동)

        - 인스펙터 창에 표시되는 위치, 회전, 스케일은 지역 공간 기준으로 측정된 값

        - transform.Translate(). 지역 공간(오브젝트 공간)을 기준으로 동작

        - transform.Rotate(). 기본적으로 지역 공간을 기준으로 동작

        - transform.forward 지역 공간(오브젝트 공간)의 방향벡터

        - Vector3.forward 전역 공간의 방향벡터

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    댓글

Designed by Tistory.