오늘의 코드카타
숫자 타자 대회
- DP + 최단 경로
- LV3 - 21% (복습 필요)
-> 문제 풀이
오늘의 공부
팀 프로젝트 진행 내용
- 커스텀 뎁스를 활용해서 머터리얼, 포스트 프로세스를 통해 장애물을 관통한 액터에게 아웃라인을 표시해주는 기능 연구
오늘의 CS
언리얼 엔진의 실행 라이프사이클
- 엔진 초기화
UEngine -> UGameEngine 초기화
- 렌더링, 오디오, 네트워킹 등 서브시스템 초기화
- GameInstance 생성
- 프로젝트 전역에서 한 번만 생성되는 객체
- 게임 시작 시 유지되며, 로그인, 네트워크 연결, 세션 관리에 주로 사용
- World 생성
- 맵이 로드되면서
UWorld가 만들어짐
- 맵 로딩 시
GameMode, GameState의 엔진의 메인 프레임워크 클래스들이 생성됨
- PlayerController / Pawn 생성
- PlayerController : 입력 처리
- Pawn : 실제 조작 가능한 캐릭터
- 게임 루프 진행
- 게임 종료
- EndPlay() 호출
- GameInstance 파괴
- 엔진 리소스 해제 후 종료
액터 라이프사이클
- 생성 (Constructor)
- C++ 생성자 호출
- GC에 의해 관리되므로
new 직접 호출하지 않음
- PostInitProperties
- OnConstruction()
- 레벨 에디터에서 액터를 배치할 때, 혹은 런타임에서 Spawn할 때 호출
- 블루프린트의 Construction Script와 대응
- BeginPlay()
- 게임 시작 또는 액터가 스폰된 순간 호출됨
- 초기화 로직을 두는 곳
- Tick()
- 매 프레임마다 호출
- 액터의 지속적인 동작을 업데이트
- EndPlay()
- 레벨 전환, 게임 종료, Destroy() 호출 시 실행
- 리소스 정리 로직 배치
- Destroy()
- 액터가 제거되고, GC에서 메모리 해제
ECS (Entity Component System)
- 개념
- Entity
- 게임 세계 안에 존재하는 객체를 식별하는 ID 같은 개념
- 스스로 데이터나 동작을 갖지 않음
- Component
- 엔티티가 가진 데이터 (순수 데이터 구조체에 가까움)
- 로직은 포함하지 않고 상태만 가짐
- System
- 특정 컴포넌트를 가진 엔티티 집합을 대상으로 로직을 처리하는 모듈
- 게임 루프에서 실행되며, 데이터를 읽고 갱신
- 장점 ( 데이터 중심 설계 )
- 캐시 친화적 : 컴포넌트 데이터를 SoA로 저장 -> CPU 캐시 효율 상승
- 유연성 / 확장성 : 새로운 기능을 추가할 때 엔티티에 컴포넌트만 붙이면 됨
- 병렬 처리 용이 : 시스템 단위로 멀티스레드 처리하기 좋음
- 의존성 감소 : 데이터(컴포넌트)와 로직(시스템)을 분리 -> 유지보수 용이