언리얼 엔진5
컴포넌트 패턴
= 디커플링 패턴의 일종, 결합도를 끊는데 목적이 있음
폰(Pawn)
플레이어나 AI가 제어할 수 있는 모든 액터의 Base class. 컨트롤러(영혼)가 폰(육체)에 빙의(possesed)되었다 해제될 수 있음
캐릭터
폰 액터의 서브 클래스. 콜리전, 입력 바인딩 등등이 포함됨
플레이어 컨트롤러
입력을 받아
게임 모드
심판, 멀티플레이어 게임의 경우 게임 모드는 서버에만 존재해야함
레벨
파일은 맵, 맵이 가상공간에 올라오면 레벨로 부름
Roughness
유/무광
Lerp(선형 보간)

https://wjs7347.tistory.com/29
물리 기반 렌더링
Physically based rendering 물리 기반 렌더링(PBR)은 이름과는 반대로 표면이 현실의 라이트 작용 방식을 모방한다는 뜻입니다. PBR 원칙에 부합하는 머티리얼은 아티스트의 직관에만 의존하여 파라미터를 세팅하는 셰이딩 워크플로보다 더 정확하고 자연스럽게 보입니다.
좀 더 정확히 접근하려면 열역학을 알아야 함
레벨 블루프린트
- 언리얼의 레벨에는 각종 이벤트 로직을 추가할 수 있다. 유니티의 레벨과는 다르다(유니티는 레벨이 껍데기고 게임 매니저가 따로 존재함)
컴포넌트
- 루트 컴포넌트는 보통 물리기능으로 설정함
블루프린트 프로그래밍 과정
- 블루프린트는 이벤트(Event) 기반으로 동작하도록 설계됨
- 이벤트는 결국 함수임
- 종류: 시스템 이벤트(빌트인), 커스텀 이벤트
- BeginPlay
- Tick(deltaTime)
- 충돌 방식
- Overlap: 서로 겹침을 허용
- Block: 겹침 허용 x - 물리 시뮬레이션을 별도로 활성화해야함
글로벌 좌표계 ↔ 로컬 좌표계
- 글로벌 좌표계 = 언리얼 엔진 기준, 물체가 변경되더라도 바뀌지 않는 고정 좌표
- 로컬 좌표계 = 상위 좌표계(=글로벌 좌표계)와의 차이만 표시하는 방식
Collision 비용
- 구
- 캡슐
- 육면체 이유: 구는 반지름 하나만 알면 됨. 육면체는 xyz 3개를 모두 고려해야함. 캡슐은 실린더와 반구 2개이므로 2개
언리얼의 문자열
- FName
- contents browser에서 에셋 이름 지을 때
- dynamic material instance parameter 변경할 때
- skeletal mesh에서 bone에 접근할 때
- 내부적으로 HashTable 사용(성능 목적)
- 대소문자 구분 x
- FString
- wchar
- 조작이 가능한 유일한 스트링 클래스
- 대소문자 변환, 부분문자열 발췌, 역순, 비교 등 사용 가능한 기능 많음(비용 증가)
- FText
- internationalization 목적
- 사용자 대상 텍스트는 이 클래스를 사용해야함

umap 확장자
- 13kb밖에 안되는 이유? binary + 모든 데이터를 저장하는게 아니라 '경로'만 갖고 있기 때문
그래픽스 프로그래밍
상수 버퍼 Update
- 자주 업데이트해줘야한다면
- 버퍼 Usage:Default + UpdateSubresource()보다
- 버퍼 Usage:Dynamic + Map/Unmap()을 쓰는게 더 빠르다
Entity-Component System
- 기존의 컴포넌트 구조는 CPU 친화적이지 않다(보통 L1L2캐시 적중률을 높이기 위해 가져올 메모리의 근처도 같이 가져오는데, 컴포넌트는 메모리 주소가 여기저기 흩어져있기 때문에)
- https://m.blog.naver.com/kiseop91/221855589754