엑셀 데이터의 임포트
- 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
- 끝나는 함수 지정