Unreal - DataTable로 스탯 관리하기

2025. 4. 11. 13:47·Unreal5 프로젝트 다이어리

보통 게임에서는 기획 밸런스 담당자분이 밸런스를 담당하기위해 수치를 담당해줄텐데

데이터값들을 직접 전부 하드코딩해서 관리하면 밸런스패치를 할때마다

프로그래머가 새로 다 값을 수정하고 다시 실행파일을 패키징해버려야하기 때문에 

코드와 데이터를 별도로 들고있는게 매우 좋다.

 

그러므로 데이터테이블로 플레이어의 스탯 을 관리해보겠다

데이터테이블을 사용하기위한 게임인스턴스르 만들어줍니다

GameInstance를 상속받아서 새로운 c++클래스를 만들어주자

StatGameInstance이라고 이름을 붙혀주겠습니다

 

그리고 구조체 데이터 테이블을 만들어주겠습니다

없음 으로 빈 c++ 클래스로 만들어주겠습니다
빈 c++를 구조체형식으로 코드를 변경

FTableRowBase를 상속받아줍니다 (c++클래스 제작할때는 빈 c++로 제작 public FTableRowBase를 작성해야한다는뜻)

데이터테이블을생성
내가만든 c++ 구조체가 잘 들어가있는걸 확인할수있다
원하는 스킬기본값을 원하는 값으로 수정
스킬의 기본계수 값들을 추가해주고



값을 추가해줬습니다

이제 인스턴스에서 데이터테이블의 값을 받아오겠습니다

반드시 넣어줍니다

CharacterStatData는 제가 만든 c++클래스입니다

게임 인스턴스의 .h 코드입니다

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
'Unreal5 프로젝트 다이어리' 카테고리의 다른 글
  • Unreal - 넉백 날려보내기
  • Unreal - 캐릭터 광역공격 만들기
  • Unreal UI - 적 정보가 담긴 위젯 띄우기
  • Unreal UI - 데미지 표기(HUD)
lucodev
lucodev
커피와 노트북 그리고 개발
  • lucodev
    루코 개발테이블
    lucodev
  • 전체
    오늘
    어제
    • 분류 전체보기 (119) N
      • Unreal5 프로젝트 다이어리 (73)
      • Unreal5 프로젝트 다이어리2 (2)
      • Unreal 팁 (8)
      • Unreal 디버깅 (8)
      • C++ 프로그래머스 다이어리 (21) N
        • Stack (3)
        • Hash (4) N
        • Heap (2) N
        • Sort (1) N
      • 코드 개인보관함 (7)
  • 인기 글

  • 최근 글

  • 최근 댓글

  • 링크

  • 공지사항

  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 태그

    언리얼 behavior tree
    언리얼 로딩
    언리얼 페이드 아웃
    unreal look at
    unreal 시퀀스
    언리얼 비헤이비어트리
    unreal 컷씬
    언리얼 시퀀스
    언리얼 spawn
    언리얼 behaviortree
    언리얼 스폰
    언리얼 페이드 인
    unreal sequence
    언리얼 foot step
    언리얼
    언리얼 로딩창
    unreal loading
    언리얼 컷씬
    unreal 로딩
    언리얼 look at
  • hELLO· Designed By정상우.v4.10.3
lucodev
Unreal - DataTable로 스탯 관리하기
상단으로

티스토리툴바