본문 바로가기

유니티 프로그래밍

유니티 오브젝트(Object)와 컴포넌트(Component)의 차이와 개념

오늘 강사님께 배우길, 오브젝트와 컴포넌트의 차이를 정확히 안다면

 

유니티가 정말로 쉬워질 것이고

 

정확히 모른다면 어려워질 것이라는 부분을 듣게 되고 배우기도 했다

 

그런데 나중에 내가 까먹을 수 있기 때문에 기록을 해두려 한다.

 

 

 

오브젝트와 컴포넌트의 차이

아래 그림의 파란색  : Hierarchy 창의 오브젝트(Object)

아래 그림의 빨간색 영역 : Inspector 창의 컴포넌트(Component)

오브젝트는 Hierarchy창에 있는 모든 것들을 모두 뜻하며, 각각의 객체들을 뜻한다.

반명 컴포넌트는 오브젝트의 속성들을 지정해주는 것이라고 생각하면 편한데,

 

예를들어 고양이가 오브젝트 라면,

컴포넌트는 고양이의 생김새, 크기, 움직임 등등을 표현하는 속성 값들 하나하나를 컴포넌트라고 생각하면 쉽다

 

 

그렇다면 각각 프로그래밍 소스코드에서의 그 차이는 어떻게 드러날까?

 

 

오브젝트를 프로그래밍 소스코드에서는 아래와 같이 사용한다.

GameObject _playUI; // 게임오브젝트타입으로 _playUI 라는 변수를 선언

_playUI = GameObject.Find("UI_Play"); 
// 위에 선언한 _playUI 변수에 값을 집어넣는데.
// 그 값은 GameObject 클래스의 Find 메서드를 이용해 
// UI_Play 라는 이름을 가진 오브젝트(객체)를 찾아준 후 넣어준다.)

 _playUI.SetActive(false);
 // 8번째행 코드는  _playUI에 들어 있을 playUI 오브젝트의 활성화를 꺼주는 역할을 한다.

오브젝트는 이런식으로 사용하고

 

 

위의 코드랑 연결해서 사용한다고 가정하고 컴포넌트는 아래와 같이 사용한다.

Transform scoreNumberTrans = _playUI.transform.Find("Txt_ScoreNumber");
// 1번째행의 코드의 역할 : UI_Play 안에 있는 자식 오브젝트인 Txt_ScoreNumber를 찾게 한다.
// Txt_ScoreNumber 변수는 여기엔 안썼지만, 지금 현재의 스코어를 보여주는 텍스트박스 오브젝트이다.
// 위의 코드를 하나하나씩 풀어보자면
// 먼저, 자식 오브젝트는 Transform 컴포넌트에 들어 있다라는 중요한 부분을 알아야 된다.
// 그러므로 맨 앞에 Transform 클래스자료형으로 사용했고 그 뒤에 scoreNubmerTrans라는 변수를 만들어 준다.
// 그 변수에 _playUI 라는 객체 안에 있는 transform (여기에서는 자식을 뜻함) 을 Find 메서드로 찾는데,
// 그 자식 객체의 이름은 Txt_ScoreNumber 라는 객체의 이름이다.

Text _scoreNumberText = scoreNumberTrans.gameObject.GetComponent<Text>();
// 위의 10번째 행 코드의 역할 : Txt_ScoreNumber라는 오브젝트 안에 있는 Text라는 컴포넌트를 찾는다.
// 위의 코드를 하나하나씩 풀어보자면
// 먼저, Text 컴포넌트를 담을 변수는 Text 자료형으로 선언을 해줘야만 하므로 맨 앞에 Text로 선언,
// _scoreNumberText 라는 변수에 값을 넣어주는데, 그 값은
// 1번째 행에서 찾아낸 오브젝트 Txt_ScoreNumber 라는 객체를 역시 1번째 행에서 scoreNumberTrans에 넣어주었는데
// 결국 scoreNumberTrans에 있는 Txt_ScoreNumber 오브젝트 중 GetComponent 메서드를 이용해 "Text"라는 컴포넌트의 값을 넣어준다


_gameMgr = FindObjectOfType<GameManager>(); // 이런식으로 GameManager라는 컴포넌트(이 명령문은 GameManaber.cs 파일을 붙여 넣은 컴포넌트 파일을 찾아서 저장해줌)

 

즉 위 소스코드에서도 명확히 사용법이 다른 것을 볼 수 있다

 

한마디로 간단히 하자면 오브젝트는 Find 메서드를 통해 가져올 수 있고

(ex. GameObject.Find("UI_Play"); 

 

컴포넌트는 찾아진 객체나 지정된 객체 안에서 GetComponenet 메서드로 가져올 수 있다.

 

 

 

결국 가장 간단한 개념을 찾자면

Hierarchy 창의 모든 것들은 오브젝트, 소스코드에서는 Find로 찾는다.

Inspector 창의 모든 것들은 컴포넌트, 소스코드에서는 GetComponent 메서드로 가져온다.

 

라고 정할 수 있겠다.

 

 

이건 물론 내가 오늘까지만 배운 초급 유니티 지식이기때문에 나중에 변동될 사항이 있지만

 

지금의 나에겐 이정도로만 메모해두는게 좋을것 같아서 블로그로 남긴다.