티스토리 뷰

Unity

[Unity] 유니티 시작 - 3 (컴포넌트)

마시멜로co. 2019. 6. 3. 16:08

저번글에서는 유니티 인터페이스 사용법을 자세히 알아봤습니다.

 

이번글에서는 유니티 동작의 핵심인 컴포넌트를 설명하겠습니다.

 

1. 상속

상속이란 만들어진 클래스에 새로운 코드와 기능을 추가하여 새로운 클래스를 만드는 것입니다.

상속은 기초를 제공하는 부모클래스와 부모클래스를 상속해서 확장한 자식클래스 2가지로 나뉩니다.

 

*클래스란 묘사할 대상과 관련된 코드 (변수,메서드 등..)를 묶는 틀입니다. 

class Car{

 //차에 관련된 변수와 메서드...

}

 

사용방법은 부모 클래스에 콜론(:)기호를 붙혀 사용합니다.

class SUV : Car{
  ...
}

SUV클래스는 차에 관련된 모든 기능을 가지고 더 기능을 확장하여 만든 클래스입니다.

 

부모클래스는 자식 클래스에서 공통적으로 필요한 기능을 구현합니다. 그런데 나중에 구현할 자식클래스에 무엇이 필요한지 처음부터 추측하기는 힘듭니다.  또한 코드를 재사용하기 힘든경우가 생길 수 있습니다.

 

이런 문제를 해결하기 위해 컴포넌트 패턴을 사용해야 합니다.

 

 

2. 컴포넌트 패턴 (컴포지션 패턴)

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

여기서 이미 만들어진 부품을 컴포넌트라고 부르며 컴포넌트는 각 대표 기능을 가집니다.

컴포넌트 패턴에서 게임 오브젝트는 빈 껍데기입니다. 개발자는 빈 게임 오브젝트에 컴포넌트를 조립하여 새로운 기능을 추가할 수 있습니다.

 

컴포넌트 방식

위 그림은 사람이라는 빈 오브젝트에 각 컴포넌트를 넣어 기능을 추가한 모습입니다.

 

즉, 컴포넌트 방식은 미리 만들어진 컴포넌트를 빈 껍데기인 게임 오브젝트에 조립하는 방식입니다.

컴포넌트 방식은 3가지 장점이 있습니다.

 

1 ) 유연한 코드 재사용

-  불필요한 기능까지 모두 가져와야 하는 상속과는 달리 원하는 컴포넌트만 선택하여 가져 올 수 있다

2 ) 기획자의 프로그래머 의존도가 낮아짐

3)  컴포넌트의 독립성

- 게임 오브젝트가 단순한 빈 껍데기로 되어있어 어떤기능을 추가하고 삭제하기 쉽다. 또한 컴포넌트는 스스로 동작가능한 독립적인 부품으로 다른 컴포넌트에 의존하지 않습니다. 

 

3. 유니티 에디터 내 컴포넌트

인스펙터창에서 확인 할 수 있는 컴포넌트는 다음과 같습니다.

  • 트랜스폼 : 게임 오브젝트의 위치와 크기, 회전을 지정
  • 메시 필터 : 오브젝트의 외곽선을 지정
  • 메시 렌더러 : 메시를 따라 색을 채워 그래픽 외형을 그림
  • 박스 콜리더 : 다른 물체가 부딪칠 수 있는 물리적인 표면을 만듦
  • 리지드바디 : 게임오브젝트가 물리 엔진의 통제를 받게 됨

 

컴포넌트를 추가할때는 인스펙터 창에서 Add component 버튼을 클릭하여 추가합니다. 반대로 기존 컴포넌트를 제거할떄는 마우스 오른쪽버튼 또는 톱니 버튼을 클릭하여 Remove Component버튼을 클릭합니다.

 

컴포넌트추가

4. 메시지와 브로드캐스팅

컴포넌트 구조에서는 전체 방송을 이용해 컴포넌트의 특정 기능을 간접적으로 실행할 수 있습니다. 이러한 전체 방송을 브로드캐스팅이라고 합니다.

 

브로드캐스팅이 가능한 원리를 이해하려면 먼저 모든 컴포넌트의 기반인 monoBehaviour를 알아야 합니다.

유니티의 모든 컴포넌트는 monoBehaviour 클래스를 유니티에서 미리 만들어 제공하는 클래스이며 컴포넌트에 필요한 기본 기능을 제공합니다. 즉 monoBehaviour를 상속한 클래스는 게임 오브젝트에 컴포넌트로서 추가될 수 있습니다. 

 

monoBehaviour를 상속해서 만든 컴포넌트는 유니티의 제어를 받게 됩니다. 그러므로 컴포넌트는 유니티의 메시지를 들을 수 있습니다.

 

컴포넌트는 서로 독립적이기 때문에 어떤 컴포넌트의 특정 기능을 실행 시키고 싶을때 직접 찾는 방법 대신에 메시지를 날리는 방식을 사용합니다, 

유니티는 발동시키고 싶은 기능의 이름을 넣어 게임 오브젝트에 알립니다. 모든 오브젝트는 메시지를 받습니다. 메시지를 받은 오브젝트가 메시지에 명시된 기능을 가지고 있다면, 해당 기능을 실행합니다. 메시지에 명시된 기능이 없다면 메시지를 무시합니다. 

메시지 기반방식은 누가 메시지를 보냈는지 누가 받는지를 신경쓰지 않기 떄문에 컴포넌트 독립성을 유지할 수 있습니다. 이런 방식으로 모든 오브젝트에게 동시에 알리는 방식을 브로드캐스팅이라고 합니다.

 

메시지와 브로드캐스팅은 많이 사용하는 Start(), Update(), OnTriggerEnter() 등의 유니티 이벤트 메서드가 동작하는 원리입니다.

 

이글에서는 유니티에서 게임 오브젝트의 핵심이 되는 컴포넌트와 게임 오브젝트 구조를 배웠습니다. 

 

다음글에서는 C#프로그래밍에 필요한 기본 개념을 알아보도록 하겠습니다.

 

수고하셨습니다.!

 

 

댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크