본문 바로가기

Unreal/Udemy 강의

Unreal Engine 4 C++ The Ultimate Shooter Course Section 5-9

Widget Trace When Close

위젯이 일정 거리 이내일때만 나타나도록 수정해보자.

이를 위해 우리는 오버랩 이벤트에 대해 다룰 것이다.

이를 위해 추가적으로 총기에 Sphere를 만들어줄 것이다.

 

이어서 생성자에서 초기화 및 루트에 붙여주자.

 

다음으로 오버랩에 사용될 콜백함수를 선언해주자.

오버랩됐을 때와 오버랩이 풀렸을 때 총 2개를 선언해준다.

언리얼에서 콜백함수로 사용되기 때문에 제대로 바인딩되기 위해서 UFUNCTION()을 선언해주어야 한다.

 

오버랩된 순간에 대해 다루기 때문에 동적 델리게이트를 사용하여 바인딩을 해주자.

 

그리고 ShooterCharacter 클래스에 트레이스 할지 말지를 정하기 위한 bool 변수를 선언해주자.

기본 값은 생성자에서 false로 초기화 해줄 것이다.

 

그리고 오버랩된 아이템을 카운팅하기 위한 int 변수도 선언해주자.

 

이어서 해당 int 변수를 대한 getter() 함수와,

오버랩된 아이템 갯수를 카운팅할 함수를 선언해주자.

 

오버랩된 개수가 0이하라면 트레이스를 불가능하도록 bool 변수를 false로 할당한다.

아니라면 true로 할당하여 트레이스가 가능하도록 해준다.

 

Item 클래스로 돌아가서 오버랩 콜백 함수들을 구현해주자.

만약 오버랩된 다른 액터가 존재한다면 IncrementOverlappedItemCount 함수에 접근해서 카운팅을 해주고,

오버랩된 액터가 빠져나간다면 다시 해당 함수에 접근해서 카운팅 해줬던 값을 감소시킬 것이다.

이는 해당 함수는 ShooterChracter에서 선언했던 함수이기에 헤더 선언 및 Cast 를 통해 해당 클래스에 대한 포인터를 얻어서 접근해야한다.

 

이제 ShooterCharacter 클래스의 Tick 함수에서 트레이스 할지 말지를 체크해주자.

기존 트레이스 하던 내용은 bShouldTracforItems 값이 true일 때만 트레이스를 진행하게 된다.

내용이 조금 길어져서 함수로 따로 만들어 Tick 함수내에 호출해주었다.

 

이제 컴파일을 하고 BP_BaseWeapon 클래스에 추가된 Sphere를 확인하자.

구의 반경을 150으로 늘리고, 해당 반경이 게임 내에서 보이도록 해주자.

 

이제 해당 반경 내에 오버랩되지 않고 단순히 총기를 가르키기만 한다면 위젯이 뜨지 않는다.

 

해당 Sphere의 반경 안에 들어가서 캐릭터를 오버랩 시켜주자.

이러면 오버랩 변수가 카운팅(+1) 되어 bShouldTraceForItems 변수가 true가 됨으로써 위젯이 다시 표시된다.