
Bind Item Name이번에는 Item 이름에 대해 바인딩 작업을 해주자.지금은 우리가 하드코딩 식으로 이름을 직접 적어준 상태이다.ItemName을 위한 FString 변수를 선언하고 초기화해주자. BP_PickupWidget 클래스에서 Text 부분에 바인딩을 생성해주자. 다음으로 Item Reference를 위한 변수를 선언해주자.타입을 Object Item으로 해주는 것을 잊으면 안된다. BP_BaseWeapon 클래스에서 해당 Item Reference 값을 세팅해주자.User Widget Object를 얻고, Cast를 통해 이를 Bp_PickUpWidget으로 캐스팅해주고 이를 통해 Item Reference 값을 세팅해주자.Item Reference에는 Self 값을 연결해준다.이는 C..

Hide Widget기존 위젯을 이제 없애주는 작업을 해주자.더 이상 트레이스할 것이 없거나, 총기가 아닌 다른 것을 트레이스하고 있으면 위젯을 감춰줄 것이다.이를 위해 마지막으로 트레이스하여 히트한 내용을 저장해줄 필요가 있다.ShooterCharacter 클래스에서 해당 변수를 선언해주자. TraceForItems() 함수에서 해당 변수에 HitItem을 저장해주자.그리고 만약 해당 변수가 존재하고, 해당 변수가 기존 HitItem과 다르다면 이는 다른 물체를 히트한 케이스이다.따라서 Visibility를 비활성화 해주자. 그리고 bShouldTraceForItems가 false일 때 또한 Visibility를 비활성화 해주자.해당 케이스의 경우 트레이스할 대상이 없는 상태이다.

Widget Trace When Close위젯이 일정 거리 이내일때만 나타나도록 수정해보자.이를 위해 우리는 오버랩 이벤트에 대해 다룰 것이다.이를 위해 추가적으로 총기에 Sphere를 만들어줄 것이다. 이어서 생성자에서 초기화 및 루트에 붙여주자. 다음으로 오버랩에 사용될 콜백함수를 선언해주자.오버랩됐을 때와 오버랩이 풀렸을 때 총 2개를 선언해준다.언리얼에서 콜백함수로 사용되기 때문에 제대로 바인딩되기 위해서 UFUNCTION()을 선언해주어야 한다. 오버랩된 순간에 대해 다루기 때문에 동적 델리게이트를 사용하여 바인딩을 해주자. 그리고 ShooterCharacter 클래스에 트레이스 할지 말지를 정하기 위한 bool 변수를 선언해주자.기본 값은 생성자에서 false로 초기화 해줄 것이다. 그리고 오..

Refactor Trace Under Crosshairs기존 코드에 겹치는 내용이 존재하므로 리팩토링 작업을 해주자.먼저 기존 TraceUnderCrosshiars 함수에 인풋 매개 변수로 FVector 참조 변수를 추가해주었다. 그리고 해당 함수를 통해 OutHitLocation을 저장해주자.기본은 End 즉 끝점이고, 아니면 히트한 위치이다. 그리고 GetBeamEndLocation 함수를 위 내용을 토대로 리팩토링 해주자.기본적으로 히트 위치는 Crosshiar의 트레이스하여 히트한 위치일 것이다.아니면 기존 끝점에 대한 위치이다.이 끝점에 대한 값 설정을 위해 추가적으로 FVector& OutBeamLocation 인풋 매개 변수를 추가해준 것이다. 이후 2번째 트레이스로 총기 위치부터 시작한 트..

Trace for Widget위젯이 항상 보이는건 바람직하지 않다.총기를 가르켰을 때만 위젯이 뜨도록 변경해보자. 이에 앞서서 현재 위젯이 총기를 아에 가리고 있으므로 위젯을 조금 위로 올려주자. 그리고 우선 위젯이 보이지 않도록 세팅해주자.위젯은 플레이어가 가르켰을 때만 활성화되어야 한다. Trace를 이용하여 위젯을 가리킨 것을 판별해보자.기존 크로스헤어를 통해 Trace를 하여 충돌 여부를 판별하게 될 것이다.이는 ShooterCharacter 클래스에서 작업하게 된다. 우선 기존 Viewport 사이즈를 가져와야 한다.이후 이를 토대로 크로스헤어의 위치를 계산해준다.이는 기존 GetBeamEndLocation() 함수에서도 작성했던 중복되는 내용이다. 이후 크로스 헤어의 위치를 월드 좌표로 변환하..