Game Object
Game Object는
Unity엔진에서 가장 중요한 오브젝트입니다. 따라서 여러분은 Game Object가 무엇인지 또 이것을 사용하는 방법을 아는 것이 이번 강의의
핵심입니다.
GameObjects 란?
그럼 먼저 Game Object가 무엇인지 알아볼까여? Game Object는 여러분의 게임내에 있는 모든 오브젝트를 Game Object라고 합니다. 하지만 Game Object 자체로는 아무것도 하지를 못하는데여.
그래서 Game Object가 무엇인가를 하기 위해서는 여러분은
특별한 속성을 이 Game Object에 주어야 합니다. 이 속성에 따라서
Game Object가 캐랙터가 될수도 있고 맵이 될수도 있고 환상적인 이펙트가 될수도 있습니다. 그런데 Object들이 GameObject가 될텐데 방과 방안에 있는 전등을 어떻게 구별짓게 할수있을까여?
무엇이 GameObject들을 서로 다른것으로 구별되게 만드는 것일까여?
답을 말하기 전에 한번 상상해 봅시다. 비어있는 박스가
여러분 앞에 놓여 있습니다. 이 비어 있는 박스에는 여러가지 것들을 담을수 있습니다. 그림자가 들어간 섬 이나 물리가 적용된 차가 들어갈수도 있습니다. 이
박스는 무엇이든지 담을 수 있기 때문에 저장소라는 의미로 Container라고
불리웁니다. 이 Container를 Unity에서는 GameObject라 합니다. Game Object에 담을수 있는 것(Piece)을 Unity에서는 Component라고 합니다. 이 Component에 따라서 Game Objet의 성격이 변합니다. 물론
하나의 Game Object안에 여러 개의 특징을 가진 Component를 추가할수도 있습니다. 이펙
트 Component에 소리 Component를
같이 혼용하는것 처럼 말이져!!
좀더 쉬운 예를 들자면 Game Object를 비어 있는 비어 있는 냄비라고 가
정하고 게임이라는 요리를 만드는데 필요한 다양한
재료가 Component라고 생각하시면 됩니다.
GameObject와 Component와
의 관계
이제 우리는 Game Object가 Component를 가지고 있다는 것을 알았습니다. 그럼 이제 이러한 Component중
에서 제일 많이 사용하는 있는 Component에 대해서 살펴보게 될텐데여!!!!
여기서 퀴즈~~~ 제일 많이
사용하는 컴포넌트가 무엇일까여?
네! 바로 Object를 이곳저곳 이동할수 있게 해주는
Transform Component입니다. 당연한게 아니겠어여. 항상 게임은 상호작용해야하는데 오브젝트가 움직이지 않고서는 아무것도 하지못할 테니 말이져!
그럼 먼저 Transform Component가 Unity에서 어디에 있는지 한번 찾아볼까여?
단축키는 Ctrl + Shift + N을
클릭하시거나 아래 그림처럼 Menu->Game Object -> Create
Empty를 누르시면 됩니다.
그리고 나서 Heiarchy에서 GameObject를 누르시고 Inspector에
보면 Transform Componet이 보이는데여. 아래 그림처럼 빨간색 부분이 바로 Transform
Component입니다.
비어 있는 GameObject를 생성했는데도 불구하고 이름과 Tag, Layer까지 있는점을 눈여겨 보세여.
모든 GameObject는 Transform Component를 가지고 있습니다.
Transform Component가 없는
GameObject는
망고없는 찐빵일 뿐입니다.
모든 게임 오브젝트의 변환 속성은 이 Transform Component를 사용하는 것에
의해 변환이 이뤄
집니다. 이처럼 Transform Component는 GameObject에 있어서 꼭 필요한 것이며 각
GameObject
에 하나만 존재합니다. Transform component가 하나만 있다는 것이지 GameObject에 Component
가 하나만 있어야 하는
의미가 아닙니다. GameObject에는 다른
Component들이 여러 개 올수도
있습니다.
Main Camera GameObject를 한번 살펴볼까여! 아
래 그림을 한번 봅시다.
기본적으로
모든 씬에 더해지는 Main Camera
그림을 보면 Main Camera는
여러 개의 Component을 가지고 있다는 것을 알수 있습니다.
Camera Component, GUILayer, Flare Layer, Audio Listener가 바로 Component입
니다.
이러한 Component 들은 GameObject 에
추가적인 기능을 제공합니다. 이러한
Component들이 없다면 우리는 게임을 하는 플레이어를 볼수가 없습니다. Rigidbody(강체),collider(충돌체), Particle (파티클), 그리고 Audio(오디오) 등은 모두 GameObject에 추가할수
있는 Component입니다.
Transform Component
Transform Components는 가장 중요한 구성요소 중 하나입니다. 그것은 게임월드/장면내에서 게임 오브젝트의 위치와 회전, 확대/축소를 정의 합니다. 만약 GameObject가 Transform Component가 없다면 컴퓨터의 메모리상에 있는 어떤 정보일 뿐이며 게임월드에 존재하지 않게 될것입니다.
Transform Component 는 Parenting(상.하
위 개념)이라고 하는 것을 할수도 있는데 이것은 Unity
에디터에서 사용하는 것으로 GameObject로 작업을 하는데 있어서
매우 중요한 부분입니다. 이부분은 나중에 좀더 자세히 살펴보도록 합시다. 일단은 넘어갑니다.
게임 오브젝트-스크립트간의 관계
여러분이 스크립트를 짜고 GameObject에 이것을 붙일 때 마치 Component처
럼 Inspector 패널에 보이게 될것입니다. 이
렇게 보이는 이유는 스크립트가 저장될 때 Component로 바뀌기 때문입니다. 좀더 자세히 말하면 스크립트가 컴파일되고 나면
Component의 한 타입으로 저장되어 이것이 다른 Unity 엔진내
의 Component 처럼 다뤄지게 됩니다.
스크립트 코드에서 선언한 Public Variable(변수)들은 GameObject에서의 Inspector 패
널에서 그 변수들이 보이게 되서 이 변수들을 여러분은 수정할 수가 있습니다. 어때여! 꽤 놀라운 기능이지 않습니까? 변수들을 public으로 선언만 하면 툴에서 고칠수 있으니깐 말이져!
스크립트를 작성할 때 여러분은
GameObject 클래스의 멤버들을 바로 접근할수 있습니다. 임의의 클래스가 하나의 Component로서
GameObject에 붙여진다면(attatch)
여러분은 스크립트에서 단순히 멤버 이름을 타이핑해서 Component에
직접 접근할수 있습니다. 예를 들어 transform
은 gameObject.transform와
같습니다. 컴파일러는 여러분이 별도로 다른
GameObject 이름을 지정하지 않는다면 멤버앞에 gameObject가 있다고 가정하고 일을 처리합니다.
this 를 타이핑하는 것은 여러분이 짜고 있는 스크립트
component에 접근하는 것입니다. this.gameObject 를 타이핑하는 것은 script에 붙여진 GameObject를 가리키는 것입니다. 여
러분은 그냥 gameObject를 단순히 타이핑해도 GameObject에 접근할수 있습니다. this.transform 과 transform 은 같습니다. 여러분이 GameObject 멤버에 포함되지 않는 어떤 Component에
접근하려면 여러분은 앞으로 설명하게 될 gameObject.GetComponent()
을 사용해야만 합니다.