보통 게임에서는 기획 밸런스 담당자분이 밸런스를 담당하기위해 수치를 담당해줄텐데
데이터값들을 직접 전부 하드코딩해서 관리하면 밸런스패치를 할때마다
프로그래머가 새로 다 값을 수정하고 다시 실행파일을 패키징해버려야하기 때문에
코드와 데이터를 별도로 들고있는게 매우 좋다.
그러므로 데이터테이블로 플레이어의 스탯 을 관리해보겠다
데이터테이블을 사용하기위한 게임인스턴스르 만들어줍니다
GameInstance를 상속받아서 새로운 c++클래스를 만들어주자
StatGameInstance이라고 이름을 붙혀주겠습니다
그리고 구조체 데이터 테이블을 만들어주겠습니다
FTableRowBase를 상속받아줍니다 (c++클래스 제작할때는 빈 c++로 제작 public FTableRowBase를 작성해야한다는뜻)
이제 인스턴스에서 데이터테이블의 값을 받아오겠습니다
CharacterStatData는 제가 만든 c++클래스입니다
characterStatTable로 내가만든 데이터 테이블을 넣어줄자리를 만들고
init 함수 오버라이드와 상수값으로 받아올 GetCharacterStatId함수를 만듭니다
제가만든 데이터테이블의 행 이름은 Skill
FindRow로 행을 찾아서
행 이름이 Skill인걸 statData에 넣어주고
해당 작업을 완료하면 데이터 테이블에서 해당값들을 받아올수있습니다
데이터테이블에서 값을
테스트해보면
데이터테이블의 값을 잘 받아오는걸 확인할수있습니다
그러면 이제 스킬 별로 스킬의계수를 적용해야하는데
지금은 오버랩되는경우밖에 체크가되어있지않아
지금 오버랩되고있는공격이 평타인지 q 인지 w 인지 구분을 할수 없습니다
그래서 무슨스킬을 사용하고있는지에 대한 판별이 먼저 필요했습니다
캐릭터에서 사용하고있는 스킬에 대한 FString값 변수를 선언
스킬을 사용하는 부분에 string값을 해당 스킬에 맞는 값으로 설정
나머지 스킬도 같이 설정해줬다
평타도 같이 설정해주고
데미지를 받을 대상에서 데미지를 받을 함수를 수정해주겠습니다
데미지를 받는 함수 ShowHud (이름을 잘못지었지만 일단 진행하겠습니다)
InitDamage부분에서 데미지를 받습니다 매개변수 damage 값을 인자값으로 전해받아
팝업액터에 damage 수치를 띄우도록 설정합니다
그리고 currentHp에서 damage만큼 hp를 깎도록 설정
이제 오버랩되는곳 칼ACTOR에서 아까 데이터테이블값이 존재하는 gameinstance를 캐스팅후
값을 받아오겠습니다
UStatGameInstance <내가만든클래스> 와 캐스팅할 statGI와
게임인스턴스에서 값을 받아올 getDamageDatableValue함수 선언
자신이 만든 게임인스턴스헤더를 반드시 추가 후
BeginPlay에서 캐스팅후 값을 불러옵니다
GetGameInstance로 나의 게임인스턴스를 불러와서 캐스팅을 할수 있습니다
그러면 statGI 즉 내 게임인스턴스에서 데이터테이블들의 값을 받아올 함수를 선언하기전에
받아올 변수를 먼저 선언해줍니다
데이터 테이블값을 복사할 변수를 선언
오버랩되는부분쪽에서 skillname을 체크하고 아까 데이터테이블에서 복사한
스킬데미지 기본값 에서 5 ~ 20 사이의 랜덤값을 섞어준뒤 damage변수에 넣고
데미지받을 대상 의 데미지받는 함수 showhud 함수에 해당값을 넘겨주게되면
각각 데이터테이블에있는 스킬이나 평타의 기본계수 + 랜덤값 randrage(5, 20)값이 출력됩니다
'Unreal5 프로젝트 다이어리' 카테고리의 다른 글
Unreal - 넉백 날려보내기 (0) | 2025.04.11 |
---|---|
Unreal - 캐릭터 광역공격 만들기 (0) | 2025.04.11 |
Unreal UI - 적 정보가 담긴 위젯 띄우기 (0) | 2025.04.10 |
Unreal UI - 데미지 표기(HUD) (1) | 2025.04.10 |
Unreal 적 - 피격 리액션(경직) 구현하기 (0) | 2025.04.08 |