Make Unreal REAL.
article thumbnail
이득우의 언리얼 C++ 게임 개발의 정석

 

플레이어와의 Overlap을 감지할 Collision 박스와 시각화를 담당하는 Static Mesh로 아이템 상자를 구성한다.

 

ABItemBox 액터를 생성한다.

 

 

SM_Env_Breakables_Box1 Static Mesh 에셋을 연다.

 

좌측 상단의 정보에서 다음을 파악할 수 있다.

  • LOD 상태
  • 폴리곤과 버텍스 개수
  • 대략적인 크기
  • Collision 도형의 개수
    상단의 Collision 메뉴에서 Simple 혹은 Complex를 선택해 초록색으로 Collision을 표시할 수 있다.
  • ...

 

 

현재 1개의 Box Collision이 기본적으로 있는데, 없을 경우 추가할 수도 있다.

 

 

상자가 너무 작아 크기를 조정하겠다.

 

Details 패널의 LOD 0 섹션에서 Build Scale을 조절하면 크기를 조정할 수 있다.

  • 이렇게 원본 데이터의 스케일을 변경하면 게임 로직에서 Transform의 Scale 값을 신경 쓰지 않아도 된다.

 

 

(X, Y, Z)를 각각 1.5배로 늘렸다.

  • Build Scale을 수정한 후 하단의 Apply Changes 버튼을 눌러줘야 적용된다.

 

 

대략적인 크기가 53cm x 55cm x 27cm 에서 80cm x 82cm x 41cm가 되었다.

 

 

아이템 상자에 사용할 새로운 Object 콜리전 채널을 만든다.

 

 

ItemBox라는 새로운 프리셋도 만든다.

  • 물리적인 처리는 하지 않고 Overlap만 감지할 것이기 때문에 Query Only로 지정한다.
  • 기본값은 Ignore인데 캐릭터와는 Overlap을 확인해야하므로 ABCharacter 채널은 Overlap으로 설정한다.
  • ABCharacter 프리셋에서도 ItemBox와의 반응을 Overlap으로 설정한다.
    설정하지 않으면 Overlap보다 Ignore가 우선순위가 높기 때문에 무시로 처리된다.

 

 

헤더 파일에서 CoreMinimal.h 대신 ArenaBattle.h를 포함한다.

 

 

플레이어를 감지할 트리거로 사용될 Box 컴포넌트와 시각적인 부분을 담당할 Static Mesh 컴포넌트 변수를 만든다.

 

트리거에 OnComponentBeginOverlap 델리게이트에 등록할 OnCharacterOverlap() 함수도 만든다.

 

 

OnComponentBeginOverlap 델리게이트는 PrimitiveComponent.h에 다음과 같이 선언되어 있다.

  • 이런 충돌 검사류의 델리게이트는 등록해야 하는 함수의 인자가 엄청 긴 경우가 많다.
  • 익숙해지기 전까지는 직접 쓰기보다는 F12를 눌러 선언된 부분을 찾아 복사하는 것이 좋다.

 

 

OnComponentBeginOverlap은 멀티캐스트 다이나믹 델리게이트임을 알 수 있다.

 

 

델리게이트에 등록할 함수는 다음과 같은 시그니처를 가져야 한다.

  • 함수 이름은 상관 없다.
void OnCharacterOverlap(class UPrimitiveComponent* OverlappedComp,  // 나의 겹친 컴포넌트
                        AActor* OtherActor,                         // 겹친 상대 액터
                        class UPrimitiveComponent* OtherComp,       // 겹친 상대 컴포넌트
                        int32 OtherBodyIndex,
                        bool bFromSweep,                            // Sweep의 결과인지 여부
                        const FHitResult& SweepResult);             // 겹친 지점 등의 정보를
                                                                    // 담는 구조체

 

Box 컴포넌트를 생성하고 Static Mesh 컴포넌트에 박스 에셋을 지정한다.

  • UBoxComponent->SetBoxExtent(FVector) 함수를 이용해 박스 컴포넌트의 크기를 조절할 수 있다.
  • Transform의 Scale과는 다른 것이며 각 축의 값은 실제 크기의 절반을 의미한다.

 

Box 컴포넌트는 캐릭터와의 겹침 판정을 위해 ItemBox 프리셋을 설정하고 Static Mesh 컴포넌트는 NoCollision을 설정해 충돌하지 않도록 설정한다.

 

 

PostInitializeComponents() 함수에서 Box 컴포넌트의 OnComponentBeginOverlap 델리게이트에 OnCharacterOverlap 함수를 등록한다.

 

 

ABCharacter 채널과 Overlap 시에 로그를 출력하도록 한다.

 

 

아이템 상자가 캐릭터를 감지했다.

 

profile

Make Unreal REAL.

@diesuki4

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

검색 태그