VRChat/VRChat 아바타 강좌

3. Unity의 기능

FakeZero 2023. 12. 19. 20:45

3.Unity의 기능


  Unity를 모르는 상태로 아바타를 만든다는 것은 그야말로 눈뜬 장님이나 다름없다. 따라서 가장 처음 해야하는 것은 Unity의 조작법과 명칭을 익히는 것이다.
 

-Unity 조작법

  [Scene탭 조작법]

  이동 : 우클릭 + W, A, S, D

  빠른이동 : 우클릭 + Shift + W, A, S, D

  이동 속도 조절 : Scene탭의 오른쪽 위의 카메라 아이콘을 눌러 Camera Speed를 조절하면 이동 속도를 조절한다.

 

  [단축키]

  되돌리기 : Ctrl + Z

  복제(즉시 대상을 복사해서 하나 더 만든다) : Ctrl + D

  복사(붙여넣기를 하기 전까지는 새로 생기지는 않는다) : Ctrl + C

  붙여넣기(복사한 데이터를 새로 만든다) : Ctrl + V


-Unity의 각 탭의 기능

  Scene탭은 게임에 배치된 모든 것들을 보여주는 창이다. 위에서 조작한 화면도 이 Scene 창이다.

  Project탭은 게임에 들어갈 소스를 모아놓는 창이다. 한 번 불러오면 몇 번이고 게임에 넣었다 뺐다 할 수 있다. 이곳에 불러온 것들은 소스(Sauce), 또는 에셋(Asset)이라 부르는 것으로 후술할 오브젝트와는 구분해야한다.

  Console탭은 일종의 명령창이다. 동시에 오류 확인창이기도 한데 아바타 제작에 있어서는 오류 확인용으로 많이 사용한다. 아바타 제작 도중 오류를 발견했을 경우 붉은색 오류 표시나 노란색 경고 표시를 해준다. 보통 노란색은 무시해도 되는 경우이고 붉은색은 아바타를 업로드 할 수 없을 정도나 업로드 했을 때 예상치 못한 에러를 일으킬 수 있을 경우이므로 웬만해선 해결하는 편이 좋다.

  Hierarchy탭은 게임 안에 들어간 모든 물건의 목록을 표시하는데 게임 안에 들어간 것들을 이제부터 우리는 오브젝트(Object)라고 할 것이다.

  앞에서 설명한 소스, 에셋과의 차이를 쉽게 설명하면 오브젝트는 게임 시스템과 상호작용하는 것, 소스, 에셋은 오브젝트와 상호작용하는 것이라고 할 수 있다.

  예를 들어 3D 모델 에셋이 있을때, 이 에셋을 Hierarchy에 끌어놓으면 3D모델 오브젝트가 된다. 이때 이 오브젝트는 VRChat에 직접적으로 들어가서 게임에 영향을 줄 수 있고 Asset탭에 있는 3D 모델 에셋은 게임에 영향을 주진 않지만 그를 위해 설정을 조정함으로써 오브젝트 자체에 영향을 끼치는 것이 가능하다.

  아마 Hierarchy 창에는 프로잭트를 생성했을 때부터 2가지 오브젝트가 있었을 것이다. Main Camera 오브젝트와 Direct Light 오브젝트이다. 이 두 오브젝트는 이름 그대로 카메라와 빛을 담당하는 오브젝트인데 이 두 오브젝트의 차이는 컴포넌트라는 것에 의한 것으로 10장에서 더 자세히 설명하겠다.

  Inspector탭은 오브젝트 세부사항을 확인 및 수정할 수 있게 해 주는데 Transport처럼 위치, 각도, 스케일 정보를 수정하거나 아바타 업로드 때 했던 것처럼 VRC Avatar Descriptor 같은 컴포넌트라 불리는 것을 추가해서 특별한 기능들을 추가할 수도 있다.

 

  화면 상단의 중앙에 있는 재생 버튼으로 보이는 것은 진짜 재생 버튼이다. 단, 재생을 누르면 Scene탭에서 Game탭으로 강제 이동되는데 Game탭은 Hierarchy탭에 있는 Main Camera 오브젝트의 시선으로 이때까지 만든 게임이 재생되게 만든다. 우리가 하고 있는 아바타 제작의 경우 우리가 만든 여러 기능을 시험해 볼 수 있게 되는 것이다. 물론 이 변화는 꼭 Game탭에서만 관찰할 수 있는 것이 아니라 재생 도중에 Scene탭으로 이동해서 관찰할 수도 있으며 Scene탭에서는 아바타를 움직이며 기능을 시험하는 것도 가능하다.
  이제 Unity를 처음 열었을 때 볼 수 있는 창에 대한 기본적인 설명은 모두 끝났다. 하지만 아바타 제작시에는 필요한 창이 최소 2개 더 있다.
  흰색 도구 탭의 Window탭에서 Animator탭과 Animation탭을 꺼내보자. 보통은 Animator탭은 Game탭 오른쪽, Animation탭은 Console탭 오른쪽에 둔다.
  Animation탭은 말 그대로 애니메이션을 만드는 창이다. 아바타의 대부분의 기능을 애니메이션으로 구현하기 때문에 아바타 제작에 필수적인 창이다.
  Animator탭은 만든 애니메이션을 어떤 조건 하에 재생할지 결정하는 이른바 알고리즘 시스템이다. VRChat은 Unity의 프로그래밍 시스템인 C# 스크립트를 거부한다. 때문에 애니메이션 재생 알고리즘은 전부 Animator를 통해 제어해야하며 변수 조절도 Animator탭을 통해 제어할 수 있다. 사실상 VRChat 아바타의 프로그래밍 시스템이라고 할 수 있다.

-오브젝트 조작 도구

  Unity에서 직접적으로 변화를 관찰할 수 있는 Scene탭은 관찰하고, 제어할 수 있는 정보량이 많은 만큼 Unity에서 지원하는 도구가 많다.

  Scene탭 위에 손이나 화살표 모양의 도구들이 있는 곳이 보일 것이다. 이 도구들은 Inspector탭이 아닌 Scene탭에서 오브젝트의 위치, 각도, 크기를 제어하기 위해서 사용되는 도구들이다.

  상하좌우 화살표 모양은 이동 도구이다. 오브젝트를 선택해서 Scene탭에 보이는 3가지 색의 화살표 중 하나를 홀드 & 드래그하면 해당 오브젝트의 위치를 변경할 수 있다. 2가지 축에 해당하는 사각형을 홀드 & 드래그하면 2가지 축으로 같이 움직인다. 또한 가장 중앙에 있는 정육면체를 드래그하면 보이는 화면에서 자유롭게 움직일 수 있다.

  회전 화살표 모양은 회전 도구이다. 오브젝트를 선택해서 Scene탭에 보이는 3가지 색의 막대기 중 하나를 홀드 & 드래그하면 해당 오브젝트의 각도를 조절할 수 있다. 중앙을 홀드 & 드래그하면 바라보고 있는 방향 기준에서 오브젝트를 회전시킬 수 있다.

  확대 모양의 도구는 스케일 조절 도구이다. 오브젝트를 선택해서 Scene탭에 보이는 3가지 색의 막대기 중 하나를 홀드 & 드래그 하면 해당 오브젝트의 스케일, 즉, 크기를 조절할 수 있다.  중앙의 정육면체를 드래그하면 3가지 축 모두 해당하는 스케일, 즉, 전체적인 크기를 조절할 수 있다.

  이 세 가지 도구는 오브젝트의 Transform 컴포넌트의 정보를 Scene탭에서 즉각적으로 확인하고 변경하는데 큰 도움을 준다. 단, 설명한 기능 중, 이동 도구를 통한 자유로운 이동은 추천하지 않는데 마우스는 2가지 축으로 밖에 오브젝트를 움직일 수 없는 반면 실제 3D 좌표축은 3개나 있기 때문에 오브젝트의 이동에 예상치 못한 움직임이 들어갈 수 있기 때문이다. 이에 관련된 내용은 직접 해보면 바로 알 수 있을 것이다.

  추가로 사각형 도구라는 것이 있다. 이동 도구와 스케일 도구를 합쳐놓은 것인데 오브젝트의 전체적인 모습을 2가지 축에 대하여 사각형으로 가두고 문서 파일의 그림 크기를 조절하듯이 오브젝트 가장자리에 생긴 사각형을 조절하면 오브젝트를 늘리거나 줄이거나 할 수 있다. 다만 늘이고 줄인다는 것은 오브젝트의 중심이 변하게 되므로 오브젝트의 스케일만 변하는 것이 아니라 좌표도 변하게 된다.

  가장 마지막 도구는 트랜스폼 도구로 사각형 도구를 제외한 모든 도구를 합쳐놓은 것이다.


-오브젝트의 중심(Center, Pivot / Global, Local)

  오브젝트 조절 도구를 살펴보았으니 이 도구를 더 유용하게 사용할 수 있는 도구를 소개하겠다. 방금 소개한 도구들 오른쪽에 Center 또는 Pivot, 그리고 Global 또는 Local이라고 적혀있는 도구가 있다. 이 도구들은 이동, 회전, 스케일 도구의 중심, 방향을 변화시키는 도구로 때에 따라 작업을 편하게 해준다.

Center
Pivot

  CenterPivot은 오브젝트의 기준점에 관한 것이다. 이 설정에 따라 바뀌는 것은 도구의 중심이다. Center은 모델링 과정에서 설정한 기준점을 무시하고 오브젝트의 중심에 도구 중심을 놓는다. 이에 대한 더 자세한 내용은 5장에서 설명하도록 하겠다.  Pivot은 오브젝트 고유의 기준점으로 3D 모델의 경우 모델링 과정에서 설정할 수 있다. 즉, Unity에서 설정할 수 있는 값이 아니다. 이 설정에 관해서는 Unity가 제공하는 기본 오브젝트로는 확인하기가 힘드므로 나중에 직접 추가한 오브젝트로 확인하면 쉽게 확인할 수 있다.

  GlobalLocal은 오브젝트의 방향과 관련된 것으로 이 설정에 따라 바뀌는 것은 도구의 각도이다. Global은 오브젝트의 각도를 무시하고 도구의 각도를 무조건 Unity 자체의 X, Y, Z 좌표에 맞게 고정한다. Local은 현재 오브젝트의 각도가 처음 설정된 각도에서 얼마나 바뀌었나에 따라서 도구의 각도도 변한다. 


-컴포넌트

  다음으로 설명할 것은 컴포넌트에 관한 내용이다. 컴포넌트란 오브젝트에 기능을 넣어주는 것이라 생각하면 편하다. 오브젝트를 생성했을 때, 가장 기본적으로 들어가는 Transform 또한 컴포넌트의 일종이다. 이 외에도 아바타 업로드에 쓰이는 VRC Avatar Descriptor도 VRC를 위해 추가된 컴포넌트이고 물리 충돌을 활성화하는 Rigid Body나 물리 충돌의 면적을 결정하는 Collider 등등 수십가지의 컴포넌트가 Unity에 구비되어 있다.


-부모(Parent), 자식(Child) 오브젝트

  마지막으로 설명할 것은 부모(Parent), 자식(Child) 오브젝트에 관한 것이다. Hierarchy탭에 아무거나 두 가지 오브젝트를 생성해보자. 그 후 한 오브젝트를 드래그해서 다른 오브젝트에 겹쳐서 드랍하면 그 오브젝트의 하위 오브젝트로 선택한 오브젝트가 들어가게 된다. 이때, 상위에 있는 오브젝트를 부모, 하위에 있는 오브젝트를 자식 오브젝트라고 한다.

  자식 오브젝트는 부모 오브젝트의 Transform 정보의 영향을 받게 된다. 즉, 부모 오브젝트가 움직이면 자식 오브젝트도 같이 움직이고 회전하면 같이 회전하며 크키가 달라지면 같이 달라진다는 뜻이다.

 

  자식 오브젝트는 부모 오브젝트의 영향을 받기 시작하는 순간, (0, 0, 0) 좌표의 위치가 바뀌게 되는데 부모 오브젝트의 기준점이 0,0,0 좌표로 취급된다. 따라서 이때까지의 좌표가 그대로 있다고 생갇해선 안된다. 경우에 따라선 좌표나 각도, 스케일이 말도 안되게 작아질 수 있으며 지수를 의미하는 E가 포함된 거대한 값(예를 들어 1E+12는 10의 12제곱)이 될 수도 있다. 이는 프로그램의 오류가 아니므로 정확하게 인지해야한다.


  이렇게 해서 Unity의 기본 설명은 끝났다. 다음 강좌에선 많이 사용하는 파일 형식에 대해서 알아볼 것이다.