디자인 패턴은 과거 소프트웨어 개발 과정에서 발견된 설계들의 노후아를 축적하여 이름을 붙여, 이후에 재사용하기 좋은 형태로 특정의 규약을 묶어서 정리한 것입니다.
디자인 패턴을 사용하는 주된 이유는 "코드의 재사용성, 유지 보수성, 확장성 향상" 입니다.
Singleton : 각종 매니저들을 관리하는 메인 관리자와 그 메인 관리자를 통해 접근이 가능한 부가 기능의 매니저 들을 관리할 때 싱글톤을 이용하여 관리했습니다. 싱글톤의 경우 정적으로 하나만 존재하여, 각 기능의 매니저는 하나의 기능만 담당하며 하나만 존재하면 되기에, 싱글톤을 활용하여 접근이 쉬워 유지 보수성을 높였습니다.
Enemy들의 AI를 설계할 때, 상태패턴을 이용한 FSM이나 HFSM을 고려하였지만, 그보다 더 확장된 개념이고 규모 확장에 대비하여 유지보수 및 확장성이 탁월한 Behavior Tree를 사용하여 Enemey들의 인공지능을 관리하였습니다.
Singleton : 게임 내의 유일한 객체, 예를 들어 (게임, 데이터, 오디오 등) 매니저와 같은 중앙 관리를 구현할 때 자주 사용됩니다.
Observer : 이벤트가 발생할 때 마다 구독(등록)된 객체들에게 알림을 보내어 변화를 감지하는 패턴입니다.
Command : 사용자의 입력을 객체로 캡슐해서 입력 처리를 더 유연하게 해주는 패턴입니다.
State : 객체의 상태에 따라 객체의 행동을 변경할 수 있게 해주는 패턴입니다.
Component : Unity의 핵심인 컴포넌트 기반 아키텍처 자체가 이 패턴입니다.
GameRoof(Updete) : 게임 오브젝트의 사이프사이클을 설정하고 체계적으로 관리하여 게임 오브젝트가 실행되어야 할 행동을 관리하는 패턴입니다.
MVC(Model-View-Controller) 모델은 소프트웨어의 설계 패턴 중 하나로, 애플리케이션을 세 가지 주요 구성 요소로 분리하여 관리하는 방법입니다.
Model : 데이터의 저장, 검색, 수정 등 데이터 관련 로직을 처리합니다.
View : 모델이 제공하는 데이터를 사용하여 UI를 구성하고, 사용자가 볼 수 있도록 데이터를 시각화합니다.
Controller : 사용자의 행동(마우스 클릭, 키보드 입력 등)에 따라 그에 맞게 모델을 업데이트 하거나 특정 뷰를 사용자에게 제공하는 역할을 합니다.
Unity의 주로 자주 사용하는 생명주기의 순서로는
Initialization
이로써 개발을 할 때, 유니티의 자주 사용되는 생명주기들은 기억을 해두고 작업을 해야 생명주기의 반전으로 인한 오류를 피할 수 있습니다.
생명주기 메서드
Awake : 게임 오브젝트가 생성될 때 단 한번 호출.
Start : 첫 번째 프레임 업데이트 실행 전 호출
FixedUpdate : 프레임과 독립적으로 일정 간격으로 호출
Update : 매 프레임마다 호출
LateUpdate : 모든 Update 함수가 호출된 후 매 프레임마다 호출
On(Collsion,Trigger)(Enter,Exit,Stay) : 게임 오브젝트가 물리적 충돌 또는 Collider가 겹칠때 시작, 지속, 종료 할 때 호출됩니다.
On(Enable,Disable) : 게임 오브젝트가 활성화/비활성화 될 때 호출됩니다.
(Start, Stop, StopAll)Coroutine : 코루틴을 시작하거나 하나 또는 모두 중지할 때 사용됩니다.
OnGUI : 렌더링과 이벤트 처리를 위해 프레임당 여러번 호출될 수 있습니다. 디버깅이나 간단한 UI요소를 그리는 데 사용됩니다.
GetComponent, GetComponentInChildren, GetComponentInparent, GetComponents : 게임 오브젝트에 붙어있는 컴포넌트에 접근할 수 있는 방법들입니다.