언리얼 - C++ 프로젝트

OpenWorldRpg (10) 무기 히트박스

earth-star 2025. 5. 11. 17:18

무기의 히트박스를 생성하고 공격할때만 콜리전을 활성화하는 과정을 해 볼 것이다.

 

전에 만들었던 게임과 유사하지만 이를 C++로 구현해볼 것이다.

 

먼저 C++대신 블프로 해보면 다음과 같다.

히트박스를 추가하고 검의 크기에 맞춰준다.

 

박스 콜리전을 트레이스하기 위해서 검의 시작부분과 끝부분을 Scene을 추가하여 검 위와 아래에 추가한다.

위와 같이 히트박스 오버랩시 박스 트레이스를 활성화한다.

 

이 과정을 C++로 구현하면 된다.

USceneComponent 타입의 BoxTraceStart와 BoxTraceEnd를 추가한다.

둘을 SetAttachment로 루트컴포넌트에 부착한다.

 

BeginPlay를 추가하여 시작시 AddDynamic으로 OnBoxOverlap 함수에 바인드한다.

전에 만든 오버랩이벤트와 유사하다.

 

UkismetSystemLibrary.h에 있는 BoxTraceSingle 함수를 호출한다.

공격 몽타주에서 검을 휘두를때만 콜리전 활성화를 위한 노티파이를 추가한다.

SetWeaponCollisionEnabled 함수를 만들어서 에디터에서 부를수 있도록한다.

WeaponBox를 가져와야하는데 private으로 가져오지 못하므로 FORCEINLINE으로 가져올 수 있는 함수를 추가한다.

함수는 위와 같이 콜리전을 선택할 수 있도록 구성한다.

ABP에서 노티파이시 콜리전이 활성화되고 꺼지는 것을 구성해준다.

휘두르지 않을 때는 무기가 벽에 닿아도 트레이스가 동작하지 않지만 휘두를때는 동작하여 트레이스가 표시되는 것을 볼 수 있다.