게임 오브젝트는 한마디로 게임 내에 존재하는 모든 것을 말합니다.
즉 게임의 모든 씬 안의 물체나 캐릭터, 카메라, 조명 등은 전부 게임 오브젝트이고
게임 안에서 보이거나 동작하는 모든 것의 틀 또는 뼈대라고 생각하시면 됩니다.
게임 화면에서 보는 모든 것들이 각각 하나의 오브젝트입니다.
하지만 게임 오브젝트는 하나의 껍데기일 뿐입니다.
그 껍데기에 생명을 불어넣는 즉, 그 껍데기가 작동하는 기능들이 컴포넌트입니다.
게임 오브젝트는 다른 게임 오브젝트 밑에 붙여서 계층 구조를 만들 수 있는 특징이 있습니다.
예를 들면 FPS에서 총이 캐릭터 손에 붙어 있으면, 손 움직일 때 총도 같이 움직이는 것이
계층 구조를 만드는 대표적인 예시입니다.
public GameObject target;
public GameObject target2;
public void Start()
{
// Tag로 찾는 것을 추천
target = GameObject.FindGameObjectWithTag("Player");
// 이름으로 찾는 것은 비추천
target2 = GameObject.Find("Player");
}
게임 오브젝트를 찾을 때 Tag를 통해서 찾을 수도 있고 해당 오브젝트의 이름을 통해 찾을 수도 있습니다.
하지만 이름보다는 Tag로 찾는 것이 추천됩니다.
이름은 씬 내의 모든 게임 오브젝트를 탐색해서 일치하는 이름을 찾기 때문에 시간이 오래 걸립니다.
Tag의 경우 내부적으로 태그 인덱싱을 통해 더 빠르게 찾을 수 있습니다.
컴포넌트는 게임 오브젝트에 붙는 기능들입니다.
게임 오브젝트는 껍데기고, 컴포넌트가 있어야 의미 있는 존재로 탄생하는 것입니다.
유니티에서 게임 오브젝트에 기능과 성질을 부여하기 위해
게임 오브젝트에 기능과 성질을 부여하는 '컴포넌트'라는 개념을 사용합니다.
모든 게임 오브젝트가 가지는 공통적인 컴포넌트가 존재하는데
물체가 가지는 기본적인 특징인 크기, 회전, 위치에 대한 정보를 가지고 있어야 합니다.
그렇기에 게임 오브젝트는 Transform 이라는 컴포넌트를 기본적으로 가지고 있습니다.
컴포넌트 기능 Transform 위치, 회전, 크기 조절 Sprite Renderer / Mesh Renderer 2D/3D 이미지를 보여줌 Collider 충돌 영역 정의 Rigidbody 중력, 물리 계산 Audio Source 소리 재생 Camera 씬을 보는 시점 Light 빛을 비춤
위의 표의 컴포넌트 기능들은 자주 사용하는 기능만 적을 것이고 이것 말고도 상당히 많습니다!
그리고 유니티에 없는 컴포넌트 기능을 만들기 위해서는 직접 Script를 통해 추가해야 합니다.
게임 시작하고 계속 작동해야 하는 컴포넌트는 유니티에서 추가하면 됩니다.
만약 게임 진행 중 컴포넌트가 추가되거나 삭제되야 하는 경우가 있을 겁니다.
예를 들어 우주에 중력 없이 떠다니다가 지구에 오면 중력이 적용되야 하겠죠
public class PlayerController : MonoBehaviour
{
void Start()
{
// 이 게임 오브젝트에 붙은 Rigidbody를 호출
Rigidbody rigid = GetComponent<Rigidbody>();
// 이 게임 오브젝트에 Rigidbody 추가하는 기능
target.AddComponent<Rigidbody>();
// 있으면 가져오거나 없으면 추가하고 가져오는 기능
target.GetOrAddComponent<Rigidbody>();
// 삭제
Destroy(gameObject); // 게임 오브젝트 삭제
Destroy(camComponent); // 컴포넌트 삭제
}
}