Component, Prefab의 정의를 알아보고
게임 진행 중 오브젝트의 생성 및 파괴 방법과 메모리 동작 과정
그리고 생성 파괴의 반복 시 생길 수 있는 문제에 대해 알아보겠다.
게임 내 존재하는 모든 요소를 오브젝트라 칭함.
형체가 있는 물체에만 적용되는 개념이 아닌, 기능의 담당자로서만 존재하는 오브젝트도 존재.
모든 게임 오브젝트는 기능과 형태를 지니며
유니티는 가상 공간에서 이런 기능과 형태를 부여하기 위해
컴포넌트(Component) 라는 개념을 사용함.

첫 글자가 대문자일 경우 클래스를 나타내고
소문자는 오브젝트 자신을 가리킨다(this)
모든 게임 오브젝트가 가지는 컴포넌트로서
물체가 가지는 기본 특징인 위치, 회전, 크기를 부여함.

씬 탭에서 마우스를 사용해 오브젝트를 제어할 수 있다.

위에서부터 QWERTY로 활성화 가능(or 클릭)
Q : 클릭을 통해 씬뷰 시점 조절
W : 오브젝트의 이동
E : 오브젝트의 회전
R : 오브젝트의 스케일 조절
T : 기준점 별 이동과 스케일을 평면단위로 조절
Y : 오브젝트의 회전과 이동을 동시에 조절

Reset!
색상, 질감 등의 디자인적 요소를 추가하는 컴포넌트.
프로젝트 탭에서 우클릭 - Create - Material로 생성하여
Inspector 창에서 조정하여 사용.

이후 드래그 앤 드랍으로 하이어라키의 오브젝트에 적용 가능하며
씬 뷰를 통해 직접 적용도 가능.
추후에 배울 내용으로 일단 중력 적용만 찍먹.
오브젝트 - 인스트럭터 및 Add Component 에서 추가

제일 아래 Use Gravity 체크 확인 후 실행 시.

중력을 갖게 되어 지면으로 추락한다.
이 외 Inspector에서 확인 가능한 컴포넌트들의 용도와 활용은 추후 작성 예정.

캐릭터, 건축물 등 원하는 형태를 만들기 위해서는 여러 오브젝트가 필요하다.
이 오브젝트를 하나의 그룹으로 묶어 하위 오브젝트로 가질 수 있도록 상위 오브젝트를 생성해보겠다.
Create Empty 생성

형태 제작을 위한 여러 오브젝트를 빈 오브젝트에 드래그 앤 드롭

결과

모든 오브젝트가 함께 이동.
2번은 군대의 지휘, 보고체계를 예로 들 수 있겠다.
간첩을 발견했을 경우, 평시와 같은 지휘체계를 토대로 보고할 시의 순서는 이렇다.
성윤모 이병 -> 분대장 -> 소대장 -> 본부중대장 -> 1대대장 -> 107보병여단장 -> 36사단장
순으로 보고가 올라가며
36사단장이 보고를 받고 내린 명령은 다시 역순으로 이등병에게 전파된다.
간첩은 이미 청와대에 도착했을 것(성능 저하).
따라서 이런 경우엔 발견 즉시 발포하여 간첩을 즉각 사살하는 것이 타당하다.
이런 식으로 상속의 깊이를 상황에 맞게 판단하여, 성능적으로 효율이 높은 구조를 생각하며 코딩하여야 한다.
프리팹. 사용자가 정의한 오브젝트의 구조와 정보를 기록한 청사진.
내용을 일정 규칙의 텍스트로 나열하여
프리팹을 인스턴스화 할 경우 이 정보를 바탕으로 인스턴스를 생성하게 됨.
즉, 프리팹은 게임 오브젝트를 그대로 직렬화한 파일이라 할 수 있음.
[] : 프로그램에 우선적으로 정보를 대괄호에 넣어 제공하는 것을 Attribute 라고 함.
[SerializeField]
프라이빗 변수를 인스펙터에 노출시킬 수 있게 해 줌.
유니티엔진의 인스펙터에 노출시키고
외부에서의 데이터 변화를 방지하면서도 데이터를 변경하기 위해 사용.
게임이 진행되는 동안 수많은 오브젝트가 생겨나고 사라지는 것이 반복된다.
이번엔 게임 구동 중 오브젝트를 생성하고 파괴할 때 사용하는 메서드와 주의점을 알아보겠다.
//오브젝트 생성 함수, 게임 오브젝트 타입을 매개변수로 입력
Instantiate(GameObject object);
//오브젝트 파괴 함수, 마찬가지.
Destroy(GameObject Object);
C#과 마찬가지로 GC를 통해 메모리를 수거함
따라서 잦은 생성과 파괴의 반복이 계속될 경우 GC의 동작 역시 자주 반복되며
게임의 동작이 원활히 이루어지지 않고, 과부하가 생기며 이를 GC 스파이크 라고 함.
이와 같은 현상을 피하기 위해 오브젝트 생성과 파괴엔 주의가 필요함.
저번에 배운 오브젝트 풀링 기법을 활용하면 좋을 듯.
컴포넌트 프리팹 직렬화
오브젝트의 생성과 파괴에서 일어나는 문제점 등에 대해 알아보았다.
새로 배운 지식을 정리해봤으니
이를 토대로 스크립트 작성을 반복숙달하여 익숙해져야겠다.