Unity

20230811-temp

temp-franc 2023. 8. 11. 20:57

-Unity Documentation 파고들기 1번.

!! 트랜스폼 컴포넌트 ( Transform )

 

: 씬 속 각 오브젝트의 위치(Position), 회전 (Rotation), 크기 (Scale) 를 결정한다.

: 모든 게임 오브젝트에는 트랜스폼이 존재한다. (객체가 아닌 클래스의 개념)

 

 1. Position

: 오브젝트의 x, y, z 좌표

 2. Rotation

: 오브젝트의 회전 정도

: 각 축을 기준으로 x, y, z 

: 도 단위로 측정함

 3. Scale

: 오브젝트의 크기

: 각 축을 기준으로 x, y, z

: 값 "1" 이 오브젝트가 임포트된 크기 임.

 

 4. 부모 - 자식

 : 자식 관계의 오브젝트는 부모 오브젝트가 이동, 회전, 스케일할 때 동일하게 동작한다. ex) 부모 : 몸 / 자식 : 팔

 

!! 왼쪽 큰 2D sprite square 가 부모, 오른쪽 작은 2D sprite square 이 자식일 경우, 회전하는 애니메이션을 부모에만 주었을 때 자식은 이를 따라감.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

==> 이 때, 둘의 scale이 다른데(비균등 스케일), 자식에 또다른 회전 애니메이션을 추가하면, 모양의 변형이 일어난다.

       또한, 속도 저하의 원인이 된다.

==> 따라서, 3D 모델의 경우, 왜곡이 더 심해지기 때문에 비균등 스케일이 일어나지 않게,

       부모-자식 간균등한 scale을 유지해야한다.

 

!! 비균등 스케일로 인해 자식의 형태가 왜곡된 모습

 

 : 또한, 오브젝트간 부모-자식의 관계를 형성할 때에는 자식을 추가하기 전, 부모의 Position을 0,0,0 으로 함으로써 자식의 로컬 좌표가 글로벌 좌표와 동일하게 해야함.

 

 :

 5. transform

 : 게임오브젝트에 할당된 Transform 컴포넌트

 : GetComponent<transfom>()

  -> 모든 게임오브젝트는 기본적으로 Transform을 가지고 있기 때문에, 스크립트에서 Transform으로 선언 후, GetComponent<>() 없이 바로 사용할 수 있다.

 

 6. Transform 의 변수

 I. 부모 자식 관련

    - Transform.childCount

    : 해당 부모 transform이 가진 자식의 수

 

    - Transform.root

    : 해당 오브젝트에서 가장 부모의 (가장 상위의) Transform 컴포넌트.

 

    - Transform.position

   : 해당 오브젝트의 world 상 좌표

 

    - Transform.localPosition

    : 부모 오브젝트에 대한 자식 오브젝트의 상대적 위치

public Transform parentExample;              // 부모 오브젝트의 트랜스폼
public Transform childExample;               // 자식 오브젝트의 트랜스폼
public GameObject parent;                    // 부모 오브젝트


// Start is called before the first frame update
void Start()
{
    Debug.Log(childExample.position);         // 자식 오브젝트의 world상 위치좌표 반환
    Debug.Log(childExample.localPosition);    // 자식 오브젝트의 localPosition 위치좌표 반환
}

자식 오브젝트는 부모오브젝트의 (+0.75, +0.38, +0)인 위치에 존재하며, world상 (1.5, 0.38, 0) 의 위치에 존재한다.

 

    - Transform.rotation

    : 쿼터니언(Quarternion) 기반으로 해당 오브젝트의 world 회전량을 사원수 값(x, y, z, w) 으로 나타냄.

 

    ** 쿼터니언(Quarternion)

     : (x, y, z, w)의 4개의 수로 이루어짐. (x, y, z)의 벡터와 하나의 스칼라인 w로 이루어짐.

 

    - Transform.localRotation

    : 부모 transform의 상대적인 회전량 사원수값을 Vector3로 접근함.

     

    - Transform.eulerAngles

    : 도(Degree) 기반으로 해당 오브젝트의 world 회전량을

      Vector3(x축 회전 정도 (도), y축 회전 정도 (도), z축 회전 정도 (도))로 나타냄.

    : 유니티에서는 이 방식대로 회전을 수행하면, 짐벌락 현상이 일어나서, 대부분 쿼터니언 기반으로 회전을 계산함.

    !! 대부분 값을 참조할 때만 사용. 이 방식으로 회전을 시키지 않는다. 

    

    ** 짐벌락

      : 도 기반으로 회전을 수행하다, 회전축이 겹쳐져서 더 이상 회전이 되지 않는 상태.

 

     -Transform.localEulerAngles

     : 부모 transform의 상대적인 회전량 벡터값.

 

 

II. 벡터 관련

   !! 유니티에서는 위치를 표현할 때 왼손 좌표계를 사용한다.

    - Transform.forward

    : world space 상 파란 축에 해당하는 z축의 벡터를 정규화한 것.

    : new Vector3(0,0,1)

 

    - Transform.right

    : world space 상 빨간 축에 해당하는 x축의 벡터를 정규화한 것.

    : new Vector3(1,0,0)

 

    - Transform.up

    : world space 상 초록 축에 해당하는 y축의 벡터를 정규화한 것.

    : new Vector3(0,1,0)

 

     **벡터의 정규화

    : 방향만을 지니고, 크기가 1인 벡터.