[GameObject]
유니티는 컴포넌트 기반 개발(CBD : Component Based Development) 방법론을 지원한다.
CBD는 독립적인 기능 단위로 컴포넌트를 제작해 필요한 기능을 조립하는 방식.
컴포넌트란 게임오브젝트의 기능을 담당하는 부분.
CBD는 컴포넌트의 재사용이 가능하고, 높은 생산성이 장점이다.
GameObject는 특정 속성이나 기능을 갖춘 오브젝트를 담을 수 있는 상자에 비유.
유니티에서는 일반적으로 사용되는 오브젝트를 일부 템플릿 형태로 제공
Light, 3D Object, Particle, Camera
캐릭터, 아이템, 상자, 몬스터 등 모든 것이 게임 오브젝트이다.
GameObject들은 기본적으로 Transform Component를 포함하고있다.
Transform Component를 통해 해당 Object가 월드 상에 어디에 위치하고 있는지, 얼마나 회전하고 있는지, 어느정도 크기인지 결정되기 때문.
유니티에서 GameObject에게 제공하는 기본함수
Awake
스크립트가 실행될 때 한 번만 호출되는 함수.
상태 값 또는 변수의 초기화에 사용된다.
스크립트 함수 중, 가장 먼저 호출된다.
스크립트가 비활성화 되어있어도 호출된다.
Coroutine으로 실행 불가.
Start
Update 함수가 호출되기 이전에 한 번만 호출되는 함수.
스크립트가 활성화 되어있어야 실행된다.
다른 스크립트의 모든 Awake가 모두 다 실행된 이후에 실행된다.
Coroutine으로 실행 가능
Update
매 프레임마다 호출되는 함수.
주로 게임의 핵심 로직을 작성하는데 사용.
스크립트가 활성화 돼 있어야 실행된다.
LateUpdate
모든 Update 함수가 호출되고 나서 한 번씩 호출된다.
Update 함수에서 전처리가 끝난 후 실행해야하는 로직에 사용된다.
카메라 이동 로직에 주로 사용하는 함수.
스크립트가 활성화 돼 있어야 실행된다.
FixedUpdate
물리엔진의 시뮬레이션 계산주기로 기본값은 0.02초다.
발생하는 주기가 일정하다.
OnEnable
게임 오브젝트 또는 스크립트가 활성화 됐을 때 호출된다.
이벤트 연결 시 사용한다.
Coroutine 사용 불가.
OnDisable
게임오브젝트 또는 스크립트가 비활성화 됐을 때 호출된다.
이벤트 연결을 종료할 때 사용한다.
Coroutine 사용 불가.
OnGUI
레거시 GUI 관련 함수를 사용할 때 사용한다.
Component Cache 처리
Update는 프레임마다 한 번씩 호출되는 함수로서 항상 최적화에 주의를 기울여야 한다.
이동 로직의 경우 Transform Component의 Position 속성을 조금씩 변경하는 것으로 프레임마다 Transform Component에 접근하는 방식은 바람직하지 않다.
따라서 Update 함수에서 접근해야 할 컴포넌트는 Awake 또는 Start 함수에서 미리 변수에 할당한 후에 Update 함수에서 사용하는 것을 권장한다.
키워드
접근 지시자 public
기본적으로 다른 클래스에서 접근할 수 있게 해주는 접근 지시자.
유니티에서는 변수를 public으로 선언할 경우, Inspector View에 해당 변수가 노출되서, 변수의 값을 직접 수정할 수 있다.
접근 지시자 private
다른 클래스에서 접근할 수 없고, 해당 클래스에서만 사용할 수 있는 접근 지시자.
유니티에서는 Inspector View의 모드를 Debug Mode로 설정하면, private 변수값도 확인할 수 있다.
Debug Mode로 설정할 경우, Inspector View는 읽기 전용(Read-Only)가 된다.
Inspector View의 Default Mode는 Normal Mode.
또는 [SerializeField] 키워드를 해당 변수 private 앞에 선언할 경우, private 속성은 유지한 채, Inspector View에 해당 변수를 노출시킬 수 있다.
this
this 키워드를 사용한 해당 스크립트(클래스)를 지시.
this.gameObject
이 스크립트(클래스)가 추가된 게임오브젝트를 의미한다.
'Unity C#' 카테고리의 다른 글
Unity Quaternion에 대한 정리 (0) | 2018.07.23 |
---|---|
Photon Server에 대한 기본 정리 (0) | 2018.07.18 |
Unity Collider Component 정리 (0) | 2018.07.18 |
Unity RigidBody Component 정리 (0) | 2018.07.17 |
Unity3d 그래픽스, 조명에 관한 정리 (0) | 2018.07.16 |