카테고리 없음

5.8 - TIL

bugmin 2024. 5. 8. 23:51

새로 알게 된 사실

 

사실 유니티의 내부적인 코어 엔진은 C++이란 사실, 그걸 중간에 C#을 통해 연결해주는 C#엔진이 있어 우리가 C# 코드를 작성할 수 있는 것이라 함

 

유니티는 버전마다 메타데이터가 있어 막 업데이트를 하면 메타 파일이 꼬일 수 있으니 조심하자

 

에디터 확장 기능도 있어 기획자들이 맵툴을 만들어주면 좋아한다고 한다. 

과거 스타크래프트 유즈맵 만들 때 scm드래프트2의 타일깔기 같은 것을 생각하면 될 거 같다.

 

오늘은 트랜스폼에 대해 깊이 있게 배웠다.

 

겹치지기 않도록 하는 충돌체(Collider), 이미지, UI, 애니메이션 등 하나하나의 컴포넌트들이 합쳐져 있는 것이 게임 오브젝트이며 이 중 가장 중요한 것이 위치/크기/회전 값을 가지고 있는 트랜스폼 컴포넌트이다.

 

더보기

컴포넌트는 게임오브젝트를 구성하는 부품

게임 오브젝트라면 가지고 있는 컴포넌트가 트랜스폼 컴포넌트이며  트랜스폼은 부모 - 자식 관계를 가지고 있다.

 

생각해보자 무기를 들고 있는 케릭터가 이동하는데 무기는 가만히있고 케릭터만 이동하면 안된다.

 

계층(트리)구조를 가지고 있다 생각하면 된다. 

 

근데 왜 트랜스폼이라 불리는 것인가... 수학적인 개념이 들어가는데 행렬 변환(Transform)이 이용된다.

 

만일 무기를 들고 있는 사람이 있을 때

 

월드 좌표계에서 무기의 위치를 구한다하면 어떻게 구해야할까?

 

몸통의 위치에 몸통에서 무기가 떨어져있는 만큼 더해주면 알 수 있게 된다.

 

월드좌표계와 로컬좌표계

 

단순하게 월드좌표계는 월드에서의 위치이고

로컬좌표계는 부모에 대한 상대적인 위치, 크기, 회전값을 의미한다.

 

만일 건물이 월드좌표계상 (1,0,0)에 있다면

건물 안에 있는 사람은 건물 기준 로컬 좌표계 (0, 1, 0)에 있고 건물 속 사람이 들고 있는 무기는 사람 기준으로 (0.1, 0.1, 0)에 있다고 말할 수 있다. 

 

이렇듯 전체 월드에 대해서가 아니라 부모에 대해서 말하는 것이 로컬 좌표계이다.

 

로컬좌표계에서 값들은 localPosition, localRotation, localScale 와 같이 로컬이 붙는다.

월드좌표계라면 position, rotation, lossyScale 와 같이 로컬이 붙지 않고 스케일의 경우엔 lossy가 붙는다.

 

고로 만일 transform.position = newPosition 이라하면 로컬 위치를 바꾸라는게 아님 월드에서의 위치를 바꾸라는 얘기이다