20230811-temp
-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인 벡터.