[개요]
- 루멘 조명을 포함한 레벨 디자인
- 문에 적용할 Mover 컴포넌트 제작
- 플레이어에 적용할 Grabber 컴포넌트 제작
- 블루프린트에서 Grabber 호출 (C++ 함수를 블루프린트에서 호출)
- Pressure Plate 컴포넌트 제작
[프로젝트 설정]
- 1인칭 슈팅 프로젝트 이름 CryptRaider
- 마켓플레이스에서 [Medieval Dungeon] 다운로드 및 프로젝트에 추가
- 빈 레벨을 만들고 Dungeon으로 저장 및 기본 레벨로 설정
[72. Light Types]
- Directional Light: 배치되는 위치는 상관이 없다. 거리가 무한한 빛. 회전으로 방향 조정가능 (=태양광)
- Point Light: 회전이 별로 의미가 없다 (=전구)
- Spot Light: 회전에 따라 빛의 방향이 바뀐다 (=손전등)
- Rect Light: Point Light + Spot Light를 합친듯한 효과이다
- Sky Light: 주위 환경을 캡처하여 라이트로 사용한다
Sky Sphere와 Directional Light를 연동시켜서 하늘에 태양을 띄울 수 있다. Directional Light를 회전시킨 후 Refresh Material을 누르면 태양의 위치가 바뀐다.
Sky Light가 적용되지 않는것 같다면 리캡처를 눌러주면 된다.
완전 폐쇄된 공간이 아닌이상 Sky Sphere + Directional Light + Sky Light 세가지를 같이 써줘야 할 것 같다.
[73. Lumen & Light Bleed]
Lumen은 UE5에서 새로 생긴 기능이다.
픽셀 뎁스 오프셋은 루멘이 지원하지 않기때문에 그림자가 이상하게 생기므로 머티리얼에서 연결 핀을 제거해주어야 한다.
[74. Level Lighting]
아웃라이너에서 변경한 값들을 블루프린트에 일괄적용 시킬 수 있다.
[77. C++ Actor Component]
씬 컴포넌트 : 계층 구조를 가지는 컴포넌트. 트랜스폼을 가지고 있다.
액터 컴포넌트 : 기능만 가지는 컴포넌트. 트랜스폼이 없다.
씬 컴포넌트는 액터 컴포넌트를 상속받고 트랜스폼을 추가한 형태이다.
같은 기능이라도 상황에 따라 상속 또는 액터 컴포넌트를 적절히 골라야 할 것 같다.
[78. Pointer Types & GetOwner()]
액터 컴포넌트에서 GetOwner를 통해 컴포넌트를 소유중인 액터를 받아올 수 있다.
[80. Linkers, Headers and Includes]
Code -> Unreal Header Tools(UHT) -> Preprocessor(전처리기) -> Compiler(컴파일러) -> Linker(링커) -> Executable
Preprocessor ~ Linker는 Standard C++ Compilation이다.
단계가 여러개로 나뉜 덕분에 컴파일 시간이 단축이 된다.
[87. Const References & Out Parameters]
함수 파라미터로 레퍼런스가 전달되었다면 함수가 그 값에 출력할 것으로 기대되는 경우 이름 앞에 Out 접두사를 붙여야한다.
[92. DrawDebugSphere()]
HitResult에 Location과 ImpactPoint가 있고 약간의 차이가 있다.
Location은 충돌 대상과 trace shape가 접촉했을 때 trace shape의 원점 월드 좌표이다.
ImpactPoint는 충돌 대상과 trace shape가 접촉하는 월드 좌표이다.
[93. Grabbing With Physics Handle]
어떤 오브젝트를 잡기 위해서 PhysicsHandle이라는 액터 컴포넌트를 사용할 수 있다.
PhysicsHandle::GrabComponent()를 호출하여 물리가 적용된 오브젝트를 잡을 수 있다. (피직스 시뮬레이터가 켜져있어야함)
해당 오브젝트를 잡았다고 해서 계층구조가 변하지는 않는다.
[94. Waking Physics Objects]
물리학 시뮬레이션이 켜져있는 오브젝트는 일정 시간 가만히 있으면 절전 모드로 전환된다.
UPrimitiveComponent::WakeAllRigidBodies()를 호출하여 깨울 수 있다.
PhysicsHandle::GetGrabbedComponent() : 잡고있는 컴포넌트를 반환한다.
PhysicsHandle::ReleaseComponent() : 컴포넌트를 놓는다.
[97. Constructor]
생성자는 월드가 시작되기전에 호출된다.
컴포넌트 생성자에 로그출력을 해놓고 에디터에서 컴포넌트를 붙이면 로그가 즉시 출력되는것을 확인할 수 있다.
[101. Actor Tags]
액터에 태그를 부여해서 특정 액터만을 구분할 수 있다.
if (Actor->ActorHasTag("Unlock1"))
{
// do something
}
[107. Level Polish]
포스트 프로세스 볼륨의 시야 적응(Exposure) 오버라이딩을 통해서 특정 구역에서 과도하게 어두워지는 현상을 수정할 수 있다.
'언리얼 엔진 > UE5 C++' 카테고리의 다른 글
[UE5 C++] Simple Shooter -完- (0) | 2022.10.12 |
---|---|
[UE5 C++] Toon Tanks (v2) (0) | 2022.10.04 |
[UE5 C++] Obstacle Assalult (0) | 2022.09.28 |
[UE5 C++] Warehouse Wreckage (0) | 2022.09.28 |