Notice
Recent Posts
Recent Comments
05-17 09:12
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

Byeol Lo

Unity - Project: Essentials of real-time 3D 본문

Unity

Unity - Project: Essentials of real-time 3D

알 수 없는 사용자 2023. 6. 19. 15:30

 기본적으로 처음에 다운받은 유니티 에디터와 프로젝트 생성을 통해 기본적인 3D 템플릿을 생성할 수 있다. 프로젝트를 클릭하면 다음과 같이 두 오브젝트가 있게 된다.

  • Main Camera: 플레이어가 게임(Game) 뷰(플레이 모드)에서 볼 장면을 제어한다.
  • Directional Light: 태양을 시뮬레이션하고, 사실적인 시각 효과를 만들기 위해 게임 오브젝트를 3D로 반사하는 광원을 제공한다.

 

Inspector 창 활용

 각각의 오브젝트들은 프로퍼티(Property)들을 가지고 있다. Cube Object의 프로퍼티를 Inspector Window에서 살펴보자.

Cube Inspector Window

  Cube Object의 Inspector Window에서 섹션으로 구분되어 있고, 각각의 섹션은 컴포넌트(Component)로 구분되어 있다. 컴포넌트 내에는 특정한 값들을 설정할 수 있는 프로퍼티들이 있으며, 기본적으로 일부 컴포넌트들은 위에 보이는 것처럼 내장되어 있다.

 그 중에 Transform이라는 컴포넌트가 있는데, Transform은 X, Y, Z 값을 사용해 장면에서의 Cube의 크기, 회전, 위치 등을 설정할 수 있다(기본적으로 미터단위이며 unity는 y축을 up 좌표계로 사용한다). 선택된 cube를 중심으로 Scene 창에 보려면 "F"키를 눌러 큐브를 화면 중앙에 위치시키게 할 수 있다. 여기서 RGB로 보이는 좌표계를 "기즈모"라고 부르며 오브젝트의 중앙에 위치하게 된다. Transform의 창을 우클릭하여 Reset을 하면 0, 0, 0으로 이동하게 된다. 

 

Hierarchy 창 활용

 오브젝트들이 계층적으로 나열되어 있는 곳이 왼쪽의 창인데, 하나의 오브젝트가 다른 오브젝트의 상속되는 관계로 있도록 할 수 있다.

 부모 오브젝트의 Transform 각각은 자식 오브젝트에게 똑같이 영향을 주게 된다. 이렇게 설정이 끝난 자식 오브젝트를 다시 분리시킬 때는 설정된 값 그대로 Hierarchy 창에서 드래그를 하여 분리시킬 수 있다.

 여기서 계속적으로 오브젝트가 하나의 게임 오브젝트 아래 단계별 자식으로 중첩된 상태의 오브젝트를 네스티드 게임 오브젝트라고 부른다.

 

Camera Object

 카메라는 게임 뷰에 표시할 씬을 캡처해 플레이어에게 보여준다. 여기서 카메라를 선택하면 절두체(frustum)를 볼 수 있는데, 피라미드 형태의 외곽선을 절두체라고 부른다. 이는 어떤 부분이 카메라에 보이는지 표시하게 된다.

카메라를 선택하여 다음과 같이 볼 수 있다.

 

Rigidbody Component

 Object에 중력이라는 물리법칙을 주기 위해 Rigidbody component를 추가할 수 있다.

 이때, 2D가 아닌 그냥 Rigidbody를 선택해준다.

 여기서 Use Gravity 프로퍼티가 체크되어 있는지 확인한다. 그런 후에 플레이 버튼을 눌러 게임을 실행하면 중력이 적용되어 물체가 아래로 떨어지게 된다.(물체를 보고 싶다면 Scene으로 다시 가서 카메라를 선택한뒤 방향키로 보고 싶은 곳을 조정하여 Ctrl + Shift + F를 누르자)

 

Assets에서 Material 사용

 머티리얼은 오브젝트 표면의 특징과 이러한 표면이 광원과 상호작용하는 방식을 정의하는 컴포넌트이다. 각각의 새로운 3D 씬에는 태양을 시뮬레이션하기 위한 방향 광원이 포함되어 있고, 물리 프로퍼티를 변경하는 머티리얼도 사용할 수 있다.

 Assets 폴더에서 Material 컴포넌트를 생성시켜주고, 준비했던 그림 파일을 해당 Material의 Inspector창에 Albedo라는 프로퍼티의 왼쪽 정사각형에 드래그 하여 넣어준다.

 이제 생성된 Material을 드래그하여 넣어주고 싶은 오브젝트를 클릭하여 Inspector 창에 넣어준다. 마찬가지로 Physic Material도 똑같이 Assets에서 생성하고 사용할 수 있다.

Physic Material Inspector

위에서부터 차례대로 동적 마찰(운동중일 때의 마찰 계수), 정적 마찰(멈추어있을 때 마찰 계수), 탄력성 으로 해석가능하다.

 

Directional Light

 다른 오브젝트와 동일하게 광원 또한 각 컴포넌트들의 프로퍼티들을 조정하면서 위치나 빛 색깔 등도 조절이 가능하게 된다.

 Light 컴포넌트가 그 예이다. 자주 쓰이는 것으로는 빛의 색, 강도 등을 조절하는 것이 메인이다.

 

Prefab

 Java에서는 Class를 통해 Object를 생성하는데, 여기서의 Class의 개념은 Prefab을 통해 생성할 수 있다. Prefab은 Assets에 폴더를 따로 하나 만들어 거기에 모아두는 것을 추천한다.

 Prefabs라는 폴더는 우클릭을 통해 쉽게 만들 수 있으며, 이제 Class에 해당하는 Object를 만들때 필요한 설계도를 만들어야 한다. 이때 미리 만들어 놓은 계층 구조에서의 한 오브젝트에 대해 해당 오브젝트를 그대로 Prefabs 폴더 안에 드래그하면 Prefab이 만들어진다. 그리고 이 Prefab을 다시 계층 구조에 드래그하면 이 설계도를 토대로 해당 오브젝트를 복사할 수 있다.

Prefabs

 여기서 Prefab 모드라는 곳을 통해 생성했던 Prefab을 수정할 수 있는데, Prefab 모드로 들어갈 수 있는 방법은 다음과 같다.

  • Prefab의 Object로 되어 있는 계층 창의 푸른색 오브젝트 오른쪽 화살표를 Alt+좌클릭
  • Prefabs > 해당 Prefab 더블클릭
  • 계층에 푸른색 오브젝트를 클릭하여 Inspector 창의 Prefab Open 클릭

 여기서 수정되는 모든 것들은 해당 Prefab에서 나온 Object들이 수정되도록 할 수 있어 재사용성이 뛰어나다. 또한 만약에 Object들 중에 하나만 따로 수정했다고 치더라도 그 수정한 컴포넌트에대해 삭제를 할 수도 있다.

 위의 Overrides를 클릭하면 자기가 상속받았던 Prefab과 더 나아가 해당 Prefab에서 수정했던 컴포넌트 목록까지도 보여준다. 그리고 삭제하고 싶은 수정 컴포넌트를 삭제해서 원래대로 되돌릴 수 있다(Revert).

 이러한 프리팹은 객체간의 상속 관계처럼 프리팹의 프리팹을 만들 수도 있는데, 계층 구조에서 해당 프리팹의 오브젝트를 드래그하여 다시 프리팹으로 가져오면 다음과 같은 창이 나온다.

 만약 드래그한 object를 기존 prefab에 적용시키고 싶다면 Original Prefab 옵션을, 그게 아니고 기존 Prefab을 상속하는 또다른 Prefab을 만들고 싶다면 Prefab Variant 옵션을 클릭해준다. 이를 통해 하나의 Prefab에 대해 더 다양한 종의 Prefab을 만들 수 있다.

 

Asset Store

 유니티는 게임 엔진을 위한 것일 뿐 디자인은 따로 해야한다. 그러기 위해서는 디자인이 이미 되어져 있는 Asset들을 들고 올 수 있는데, 이 사이트에서 무료 어셋들을 import할 수 있다.

https://assetstore.unity.com/

 

에셋스토어

여러분의 작업에 필요한 베스트 에셋을 찾아보세요. 유니티 에셋스토어가 2D, 3D 모델, SDK, 템플릿, 툴 등 여러분의 콘텐츠 제작에 날개를 달아줄 다양한 에셋을 제공합니다.

assetstore.unity.com

위를 통해 더 시각적인 재미를 높일 수 있다.

'Unity' 카테고리의 다른 글

Unity - Essential of real-time 2D  (0) 2023.06.22
Unity - Essentials of real-time audio  (0) 2023.06.20
Unity - Essentials of programming in Unity  (0) 2023.06.20
Unity - Real-time Creation  (2) 2023.06.19
Unity - Get started with Unity  (0) 2023.06.15
Comments