DataTable을 생성 후 Attack함수 작성
오늘은 지난번 생성했던 WeaponData의 값을 토대로 DataTable에셋을 만들어 보고 Attack함수의 구현을 마치려고 한다.

에디터 콘텐츠 브라우저에서 DataTable을 새로 생성해 주고 기존에 작성한 TTWeaponData를 가져가도록 한다. TTWeaponData에는 기본적으로 작성한 StunAmount, KnockBackAmount, AttackDelay가 있으니 각 무기 별로 수치를 정해서 기입해 주면 된다.

이제 Attack 함수에서 사용할 데이터 베이스 작업이 모두 완려되었다. 이제 Attack함수에 임시로 잘 적용되었는지 확인해 볼 코드만 작성해 보도록 하겠다.
if (IsValid ( WeaponData ))
{
FTTWeaponData* CurrentWeapon = WeaponData->FindRow<FTTWeaponData> ( WeaponName , TEXT ( "WeaponError" ) );
if (CurrentWeapon != nullptr)
{
UE_LOG ( LogTemp , Warning , TEXT ( "Current StunAmount is %f" ) , CurrentWeapon->StunAmount );
}
}
Attack 함수 내부에 다음과 같이 코드를 작성한다. WeaponData 포인터가 유효한지 확인하고 유효하다면 FindRow를 통해서 WeaponData의 WeaponName을 찾아 일치하는 게 있다면 해당 행을 가리키게 CurrentWeapon를 지정해 준다. 이제 공격 때마다 CurrentWeapon이 가리키는 행의 데이터를 이용할 수 있게 되었다.
무기 획득 마다 WeaponName을 갱신해 주자
우리는 기본적으로 WeaponName은 생성 단계에서 Hand로 초기화를 해주고 있다. 그리고 게임 진행 중에 플레이어가 맵에 떨어져 있는 무기를 획득한다면 WeaponName도 그 무기에 맞게 갱신되어야 할 것이다. 그렇기 때문에 SetWeaponName 함수를 정의해 주고 무기를 먹을 때마다 갱신이 되게끔 다음과 같이 코드를 작성해 주었다.
void ATTPlayerCharacter::SetWeaponData ( FName NewWeaponName )
{
WeaponName = NewWeaponName;
UE_LOG ( LogTemp , Warning , TEXT ( "Weapon Changed to : %s" ) , *WeaponName.ToString () );
}
이제 공격은 됐으니 맞았을 때를 구현하자
우리는 캐릭터가 공격이 적중했을 때 대상 캐릭터의 기절치(CurrentStun)이 상승하고 이 값이 MaxStun 값을 넘어서면 캐릭터가 기절하게 끔 구상을 하고 있다. 그렇기에 공격로직이 어느 정도 기본을 갖춘 지금 공격이 적중했을 때 그 값이 서버를 통해서 각 플레이어에게 전달되어야 할 것이다. 일단 팀원 중 애니메이션을 담당하는 팀원이 공격 애님 몽타주를 작성하시면서 CheckHit라는 클래스를 생성해 두었으니 그 부분을 이용해 보도록 하자.

CheckHit Notfiy가 호출되면 Character의 HandleOnCheckHit를 호출하는 것을 볼 수 있다. 해당 함수에서 TakeDamage를 호출하기 때문에 무기의 StunAmount를 얻어 TakeDamage의 인자로 넣어주면 될 것이다.
'unreal 5기' 카테고리의 다른 글
| 251222 언리얼엔진 본캠프 93일차 멀티플레이 팀프로젝트7 (0) | 2025.12.22 |
|---|---|
| 251218 언리얼엔진 본캠프 91일차 멀티플레이 팀프로젝트6 (1) | 2025.12.18 |
| 251215 언리얼엔진 본캠프 88일차 멀티플레이 팀프로젝트4 (1) | 2025.12.15 |
| 251211 언리얼엔진 본캠프 86일차 멀티플레이 팀프로젝트3 (0) | 2025.12.11 |
| 251210 언리얼엔진 본캠프 85일차 멀티플레이 팀프로젝트2 (0) | 2025.12.10 |