활 방향에 따른 캐릭터의 애니메이션 수정, 크로스헤어 HUD 추가, 화살의 방향 계산, 물체 및 적과 오버랩시 이벤트, 화살 궤적 이펙트 및 각종 사운드 추가등을 구현해볼 것이다.
위와 같이 캐릭터의 위를 향하는 자세, 중간, 아래 3가지를 캐릭터의 본을 조정하여 생성하고 저장한다.
애니메이션에서 에임 오프셋을 생성하여 위에서 만든 3가지의 애니메이션을 블렌드한다.
캐릭터의 방향(위아래)에 따라 변화하는 애니메이션이므로 캐릭터의 Pitch를 계산해야한다.
ABP에서 위와 같이 Pitch를 계산하고 변수로 저장한다.
Pitch 변수를 가져와 위에서 만든 AO_Bow 애니메이션에 변수로 넣어준다.
상체만 변화하므로 UpperBody에 넣는다.
다음으로 크로스헤어 HUD를 위와 같이 간단히 만든다.
활을 당기고 있을수록 크로스헤어의 원이 줄어들게 하기위해서 HUD가 활을 당기기 시작하는 시점과 끝나는 시점을 알아야한다.
이를 위하여 위와 같이 각 이벤트 끝에 이벤트 디스패처를 추가하여 정보를 위젯 블프에 전달할 것이다.
Owing Player Pawn에서 ACBowMechanics를 가져와서 이벤트 디스패처를 바인드한다.
활을 당기기 시작하면 최대시간과 당긴 시간을 나누어 0과 1사이의 값으로 얼마나 당겼는지 float값을 구한다.
이 값에 따라 원의 크기를 줄인다.
한번만 줄어드므로 DoOnce를 추가하고 DrawTime이 Max가 아니면 다시 DoOnce를 초기화한다.
다음으로 최대 당기는 시간에 도달시 중앙의 작은 점이 파란색으로 빛나며 살짝 커지는 애니메이션을 추가한다.
위와 같이 애니메이션을 추가하고 각 프레임에서 크기(Transformation)와 색을 조절한다.
위의 크로스헤어는 조준시에만 보여야한다.
이를 위해 활을 조준시와 조준해제시 이벤트 디스패처도 추가하고 위와 같이 조준시작시 크로스헤어가 보이도록하고 조준해제시 보이지 않도록 한다.
다음은 화살이 정확히 크로스헤어의 정 중앙 점으로 날아가게 하기위한 화살의 궤적을 계산해야한다.
위와 같이 함수를 만들어서 LineTrace를 추가한다.
카메라의 위치부터 카메라가 바라보는 방향의 10000까지 거리에 라인 트레이스를한다.
이 라인 트레이스에 무언가 부딫히면 부딫힌 위치를 반환하고 부딫히지 않으면 라인 트레이스가 끝나는 지점(10000)의 위치를 반환한다.
화살의 궤적을 나이아가라(리본)을 추가하여 간단히 추가하였다.
다음으로 화살 오버랩 이벤트를 구현한다.
화살이 무언가에 부딫히면 Projectile Movement를 중지하고 Attach를 사용하여 부딫힌 물체에 부착되도록 한다.
// Enemy.h
public:
AEnemy();
UFUNCTION(BlueprintCallable)
virtual float TakeDamage(float DamageAmount, struct FDamageEvent const& DamageEvent, class AController* EventInstigator, AActor* DamageCauser) override;
UFUNCTION(BlueprintCallable)
virtual void GetHit_Implementation(const FVector& ImpactPoint, AActor* Hitter ) override;
화살이 적과 부딫혔을 때 데미지를 전달해야하므로 C++에서 위와 같이 TakeDamage와 GetHit 함수에 UFUNCTION(BlueprintCallable)를 추가하여 에디터에서 함수를 호출할 수 있도록 바꿨다.
Enemy에 Cast하고 적이라면 Apply Damage로 데미지를 전달한다.
GetHit함수도 추가하고 ImpactLocation은 오버랜된 위치를 넣어준다.
이후 마지막으로 화살 궤도 이펙트를 제거한다.
활 방향에 따른 캐릭터의 애니메이션, 크로스헤어 HUD, 화살 궤적 이펙트 및 각종 사운드, 시위를 당길시 크로스헤어 애니메이션이 잘 적용된다.
화살이 물체에 맞을시 박히고 적에게 맞을 시 데미지를 전달하는 과정이 잘 동작하는 것을 볼 수 있다.
다음으로는 인벤토리 시스템을 추가해볼 것이다.
'언리얼 - C++ 프로젝트' 카테고리의 다른 글
OpenWorldRpg (27) 활 무기 시스템 구현 2 (0) | 2025.06.30 |
---|---|
OpenWorldRpg (26) 활 무기 시스템 구현 1 (0) | 2025.06.28 |
OpenWorldRpg (25) 적 종류 추가 (0) | 2025.06.17 |
OpenWorldRpg (24) Enemy 탬플릿 (0) | 2025.06.16 |
OpenWorldRpg (22) 골드, 경험치 픽업생성 (0) | 2025.06.11 |