[개요]

  • 루멘 조명을 포함한 레벨 디자인
  • 문에 적용할 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(초록색) / HitResult.ImpactPoint(빨간색)

 

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

+ Recent posts