[UE5] 이득우 Part 2. 10강 게임데이터 관리

공부 스파이럴·2024년 1월 28일
0

엑셀 데이터의 임포트

  • DataAsset과 유사하게 FTableRowBase를 상속받은 구조체를 선언
  • 엑셀의 Name 컬럼을 제외한 컬럼과 동일하게 UPROPERTY 속성을 선언
  • 엑셀 데이터를 csv로 익스포트한 후 언리얼 엔진에 임포트

실습

  • 엑셀 파일을 csv 파일로 저장
    -> 언리얼에 임포트 가능
  • 각 컬럼의 속성들을 가지는 구조체를 만들어줌
    • 각 속성들을 float으로 통일
    • operator+ 연산자를 (구조체의 크기 / float 크기)를 통해 값만큼 반복해서 포인터를 통해 더해주게 되면 속성이 늘어나도 고칠 필요없음
  • 에디터에서 데이터 테이블을 만들어주고 csv 파일을 리임포트

데이터를 관리할 싱글톤 클래스의 설정

  • 언리얼 엔진에서 제공하는 싱글톤 클래스
    • 게임 인스턴스
    • 에셋 매니저
    • 게임 플레이 관련 액터 (게임 모드, 게임 스테이트)
    • 프로젝트에 싱글톤으로 등록한 언리얼 오브젝트
  • 언리얼 오브젝트 생성자에서 사용하지 않도록 주의

-> 게임 인스턴스는 컨텐츠 보다는 주로 어플리케이션의 데이터를 관리하는 용도로 많이 사용
-> 게임 콘텐츠에 직접적인 영향을 미치는 싱글톤 클래스 생성, 등록

  • 프로젝트 세팅 - General Settings - Default Classes - Advanced
    -> 게임 싱글톤 클래스에 만든 클래스를 등록
    • 엔진이 초기화될 때 이 싱글톤을 GEngine이라고 하는 전역 변수에 자동으로 만들어 줌

실습

  • 싱글톤 클래스
    • 싱글톤을 가져오는 Get 함수
    • 레벨의 스탯 데이터를 TArray로 보관
      • UDataTable은 key, value 쌍이지만 데이터가 레벨별로 순차적으로 되어 있으므로 TArray로 변환하여 보관
    • 해당 레벨의 Stat을 Get하는 함수

프로젝트의 주요 레이어

  • 게임 레이어 : 기믹과 NPC
  • 미들웨어 레이어 : 캐릭터의 스탯 컴포넌트, 아이템 박스
  • 데이터 레이어 : 스탯 데이터, 데이터 관리를 위한 싱글톤 클래스

캐릭터 스탯 시스템

  • 캐릭터가 소유한 스탯 컴포넌트가 스탯 데이터 소유
    • 게임 싱글톤으로부터 스탯 정보를 가져와서 베이스 스탯이라고 하는 멤버 변수에 저장
    • 모디파이어 스탯
      • 무기를 착용했을 때 스탯
    • 최종 스탯은 베이스 + 모디파이어 스탯

실습

  • 캐릭터, NPC, 스테이지 스탯, 레벨 설정
  • SpawnActor 호출 후 바로 BeginPlay가 호출되기 때문에
    -> 이후 레벨을 올려줘도 이전 레벨로 스탯이 설정돼 있음
    -> 언리얼은 SpawnActorDeferred 지원
    -> FinishSpawning을 호출한 후 BeginPlay가 호출 됨
  • 상자 자체에서 설정한 델리게이트에 의해서 이벤트가 발동하면 제어하기 불편
    -> 상자에 설정된 델리게이트 타이밍을 뒤로 미루고 기믹의 진행을 위해서 설정한 델리게이트를 미리 그 전에 설정하도록 순서를 바꿈
    -> 생성자에 있던 바인딩 함수를 PostInitializeComponents로 바꿈(BeginPlay 이후 호출이므로 동일한 효과)

  • config 폴더 ini 파일
    • {변수}={에셋 경로}
    • +는 배열을 의미
    • [{주소}] 는 객체에 대한 주소
  • NPC 클래스
    • UCLASS(config=ArenaBattle) config 지정
    • UPROPERTY(config) 배열을 config로 지정
      • 프로젝트가 로딩될 때 값이 자동으로 채워짐
    • 비동기 방식 로드
      • TSharedPtr< FStreamableHandle> NPCMeshHandle 불러올 핸들
    • PostInitializeComponents에서 진행
      • 에셋 매니저를 이용해서 RequestAsyncLoad
      • 끝나는 함수 지정

0개의 댓글