본문 바로가기

Unity

[복습] Unity #1. 프로젝트 생성과 오브젝트

728x90
반응형
해당 포스팅은 필자의 복습용 포스팅으로 예전에 다룬 정보와 포스팅이 중복으로 나올 수 있다.

[1] 새 프로젝트 생성하기

  • 새 프로젝트 생성하기 (project - new)
  • 프로젝트 설정 입력( 프로젝트 명, 경로, 템플릿)

그러면 새로운 프로젝트가 생성되고 실행되어 다음 화면이 표시됨.

1. 3D 큐브 오브젝트 생성

 하이어라키: 현재 씬에 존재하는 모든 게임 오브젝트가 표시됨.

씬: 하나의 게임 월드

 

하이어라키 창에서는 Main Camera 게임 오브젝트와 Directional Light 게임 오브젝트를 확인할 수 있다.

이때 Main Camera는 플레이어가 보게될 게임 화면을, Directional Light은 씬에 빛을 만든다.

 

하이어라키 창과 Main Camera과 Directional Light  게임 오브젝트

[3D 큐브 생성하기 - 오브젝트 생성]

오브젝트 생성하기

 하이어라키 > create > 3D object > Cude

 


위의 사진과 같이 오브젝트가 추가되고, 추가됨에 따라 인스펙터 창에서 정보를 확인할 수 있다.

 

바닥 만들기

▶ 하이어라키 > create > 3D object > Plane

 

위의 사진에서 볼 수 있듯 하이어라키 창에 plane 게임 오브젝트가 추가되고 씬 창에 하얀 바닥이 생긴 것을 확인할 수 있다.

오브젝트의 이동

Cube 게임 오브젝트를 선택하면 유니티 에디터 우측의 인스펙터 창에 오브젝트의 정보가 표시되는데, 이때 인스펙터 창은 게임 오브젝트의 정보과 컴포넌트가 나열되는 곳이다.

 

  · 컴포넌트:  게임 오브젝트 중 다양한 부품들을 일컫는 말.

  · 트랜스폼: 3D 공간에서의 위치를 결정하는 컴포넌트.

  · 리지드바디: 게임 오브젝트가 물리와 중력의 영향을 받게 하는 컴포넌트.

 

오브젝트의 리지드바디 설정

큐브를 아래로 떨어트리고 싶다면 큐브에 물리엔진 컴포넌트를 설정해야 한다. 이때 게임 오브젝트에 물리와 중력의 영향을 주는 컴포넌트가 리지드바디(rigid body)이다.

 

인스펙터 창 하단의 'Add Component' 버튼을 클릭해 게임 오브젝트에 새로운 컴포넌트를 추가할 수 있다.

 

다음과 같이 리지드 바디 컴포넌트를 추가하면 인스펙터 창에서 확인할 수 있다.

2. 씬 저장

유니티에서는 하나의 게임 월드를 씬이라고 부르는데, 하이어라키 창에는 우리가 편집 중인 씬의 이름을 확인할 수 있다. 이때 * 모양이 보인다면 씬의 변경 사항을 저장하지 않았다는 뜻이므로 [cmd + s]로 씬을 저장하도록 한다.

[2] 유니티 인터페이스

유니티 인터페이스 관련 정보를 아래를 참조한다.

https://udangtangtang-cording-oldcast1e.tistory.com/3

 

1-3.유니티 인터페이스 및 용어: 오브젝트의 컴포넌트

프로젝트 열기 좌측 상단부터 시계방향으로 씬, 하이어라키, 인스펙터, 콘솔, 프로젝트, 게임 순이다. (용어설명은 https://udangtangtang-cording-oldcast1e.tistory.com/2?category=1013393 참고) 메인 창 씬(Scene) 게

udangtangtang-cording-oldcast1e.tistory.com

인스펙터 창 설명

트랜스폼(Transform) 오브젝트의 3차원 좌표와 크기, 회전 지정.
메시 필터(Mesh Filter) 3D 메시 파일을 받아 오브젝트의 외곽선 지정.
메시 렌더러(Mesh Randerer) 메시를 따라 색을 채워 그래픽 외형을 그림.
박스 콜라이더(Box Colider) 다른 물체가 부딪칠 수 있는 물리적 표면 생성.

프로젝트 창 설명

프로젝트 창에서 에셋(Asset)은 개발에 사용할 모든 형태의 파일을 의미한다.

이미지, 음악, 3D 모델, 애니메이션 파일, 스크립트 등 파일로 존재하고 프로젝트 창에 표시되는 모두를 의미한다. 

씬 돌아다니기

· 게임 오브젝트를 더블 클릭하면 해당 게임 오브젝트가 씬 창의 중심에 보이도록 씬 카메라가 이동한다.

· 씬 창에서 마우스 커서를 위치하고 휠을 스크롤하면 물체가 가까워지거나 멀어진다.

· 핸드 툴(단축어 Q)로 씬을 상하좌우 이동할 수 있다.

 

플라이스루 모드

마우스 오른쪽 버튼을 누르고 있는 동안 플라이스루 모드가 활성화된다. 이때 해당 모드에서는 FPS 게임을 하듯이 마우스와 WASD 키로 카메라 화면을 이동할 수 있다.

 

궤도 모드

씬 창에서 Alt + 마우스 왼쪽 버튼을 누르고 있는 동안 궤도 모드가 활성화된다. 해당 모드는 씬 창 중심의 물체를 공전하면서 관찰할 수 있고, 마이수를 움직이면 씬 창 중심에 있는 물체를 기준으로 씬 카메라가 공전한다.

앞에서 다룬 두 모드는 유용하므로 기억하자.

유니티의 단축키는 다음 링크를 참고한다.

https://udangtangtang-cording-oldcast1e.tistory.com/notice/83

 

💫유니티 메서드💫

유니티 인터페이스 인스펙터 선택한 게임 오브젝트의 정보와 컴포넌트가 나열되는 곳. 컴포넌트 게임 오브젝트 중 다양한 부품들을 일컫는 말. 트랜스폼 3D 공간에서의 위치를 결정하는 컴포넌

udangtangtang-cording-oldcast1e.tistory.com

툴(Tool) 단축키 설명
핸드(Hand) Q 씬 카메라 이동
평행이동(Translate) W 오브젝트 이동
회전(Rotate) E 오브젝트 회전
스케일(Scale) R 오브젝트 크기 조정
렉트(Rect) T UI와 2D 오브젝트의 크기 조정
트랜스폼(Transform) Y 평행이동, 회전,스케일 툴을 하나로 합친 툴

[3] 유니티 엔진의 원리

상속과 재사용

개발자는 이미 작성한 코드를 재사용함으로써 불필요한 작성 시간을 줄여 작업에 효율성을 대폭 가져온다. 이러한 생성성의 증가는 개발 속도를 높이므로 코드의 재사용은 매우 중요한 습관이라고 할 수 있다.

 

유니티의 컴포넌트도 코드를 재사용하는 방법인 '상속'을 사용한다.

상속 이미 만들어진 클래스에 새로운 코드와 기능을 덧붙여 새로운 클래스를 만드는 것.
클래스 묘사할 대상과 관련된 코드를 묶는 틀. 예를 들어 몬스터의 경우 몬스터의 기능과 관련된 코드를 가짐.
상속은 부모 클래스와 자식 클래스로 이루어진다.

상속에서 가장 상위의 대상은 부모 클래스로 특정 오브젝트에서 필요한 기초를 제공한다. 이러한 부모 클래스를 기반으로 자식 클래스를 만드는데, 자식 클래스로 갈수록 오브젝트는 특정해지며 세부적인 기능을 가진다.

이때 자식 클래스는 부모 클래스에서 받은 기초를 유지하며 이에 따라 불필요한 코드의 작성을 방지한다.

 

부모 클래스의 생성으로 자식 클래스를 생성할 때 새로운 기능을 추가하기 용이하며 이미 구현된 기능을 다시 만들 필요가 없다. 하지만 이러한 상속에만 의존할 때 다음과 같은 경우는 오히려 코드를 재사용하기 어려울 수 있다.

 

1. 상속 대상이 상속자와 속성이 다른 경우

2. 애니메이션 기능 코드가 다른 경우

3. 물리 기능이 다른 경우

 

다시말해 상속자와 상속 대상이 가지는 속성이 다른 경우에는 상속 요소를 제거해야 하는데, 이로 인해 불필요한 추가 작업이 생길 수 있다. 따라서 상속에만 의존하면 기존 코드를 재사용하기 힘든 경우가 생길 수 있는 것이다. 이러한 문제점을 해결하기 위해서는 컴포넌트 패턴을 활용해야한다.

 

[컴포넌트 패턴]

컴포넌트 패턴이란 미리 만들어진 부품을 조립하여 완성된 오브젝트를 만드는 방식을 말한다.

개발자가 동물을 만든다고 했을 때, 어떠한 동물을 특정할 수 없으므로 각각의 동물들이 가지는 특징을 컴포넌트로 생성한다.

(ex) 아가미, 다리, 폐, 날개, 먹기, 자기, 달리기 etc

 

개발자가 말이라는 게임 오브젝트를 생성한다고 예를 들면 먼저 게임 오브젝트를 생성한다. 이때 오브젝트 내부에는 텅 비어있는 상태이다. 이후 말 오브젝트에 폐, 달리기 등의 필요한 컴포넌트를 조립한다. 이러한 게임 오브젝트와 컴포넌트의 특징은 다음과 같다.

 

1. 유연한 재사용의 가능: 원하는 컴포넌트를 선택적으로 활용이 가능하다.

2. 기획자의 프로그래머 의존도가 줄어듦.

3. 각각의 컴포넌트는 독립적이므로 추가와 삭제가 자유로움.

 

[유니티 에디터에서의 컴포넌트]

트랜스폼(Transform)
▶ 오브젝트의 3차원 좌표와 크기, 회전 지정.

메시 필터(Mesh Filter)
▶ 3D 메시 파일을 받아 오브젝트의 외곽선 지정.


메시 렌더러(Mesh Randerer)
▶ 메시를 따라 색을 채워 그래픽 외형을 그림.


박스 콜라이더(Box Colider)
▶ 다른 물체가 부딪칠 수 있는 물리적 표면 생성.

리지드 바디(Rigid Body)
▶ 게임 오브젝트가 물리 엔진의 통제를 받도록 함.

즉, 게임 오브젝트의 외형과 기능은 본래 오브젝트가 가지고 있는 것이 아닌 컴포넌트에 의해 추가되었다는 것을 알 수 있다.

[4] 메시지와 브로드 캐스팅

[MonoBehavier 이란]

유니티의 모든 컴포넌트는 MonoBehavier이라는 클래스를 상속한다.

MonoBehavier 클래스는 유니티에서 미리 만들어 제공하는 클래스로 컴포넌트에 필요한 기본 기능을 제공한다.

이때 MonoBehavier를 상속해서 만든 컴포넌트는 유니티의 제어를 받게 됨으로써 유니티의 메시지를 받을 수 있게 된다.

 

다시말해 MonoBehavier는 모든 컴포넌트의 필수적인 기능을 담은 부모 클래스이다.

[브로드 캐스팅]

각각의 컴포넌트는 독립적이므로 서로 상호작용하지 않으며, 유니티 엔진 또한 게임에 어떤 컴포넌트가 사용되었는지 알 수 없다.

따라서 유니티가 컴포넌트의 어떤 기능을 사용하고자 한다면 직접 명령하는 대신 각각의 컴포넌트에 메시지를 전달하는 방법을 사용하여 특정 기능을 간접적으로 사용할 수 있게 하는데, 이를 전체 방송 또는 브로드캐스팅이라고 한다.

 

이러한 메세지의 전달전역적으로 이루어지며 명시된 기능을 가진 오브젝트는 해당 기능을 실행하며 해당 기능을 가지고 있지 않은 오브젝트는 해당 메세지를 무시한다. 메세지의 방식은 다음과 같다.

 

  · 메시지의 발신부는 수신부에 상관없이 발신한다.

  · 메시지의 수신부는 발신부의 위치를 상관하지 않는다.

  · 메시지의 수신부는 메시지에 명시된 기능을 가지고 있다면 실행하며 없는 경우 무시한다.

 

유니티에서는 이런 식으로 이름만 똑같이 구현하면 메시지에 의해 자동을 실행되는 메서드들이 있는데 이를 유니티 이벤트 함수라고 한다.

728x90
반응형
댓글