엑셀시트를 이용해 Unity에 데이터를 넣는 방식 - JSON과 ScriptableObject

ggm-_-·2024년 11월 27일
2

TIL (Tody I Learn)

목록 보기
31/51

2024.11.27(수)

JSON을 이용한 방식

사용 패키지 GitHub 주소: GitHub: ExcelToJsonWizard

1. key와 int(type), ID(description)를 그림1과 같이 작성하여 데이터를 넣을 수 있다.

  • 그림1

2. 그림2와 같이 제공된 클래스와 메서드들을 이용해 사용할 수 있다.

  • 그림2

3. 그림3은 enum타입을 정의하고 사용하는 방법이다

  • 그림3

4. 그림4와 같이 DesignEnums에 엑셀시트에서 작성한 enum이 모이게 된다.

  • 그림4

5. DesignEnums를 활용한 데이터의 모습은 그림5와 같다.

  • 그림5

6. 그림6은 엑셀 파일을 어떻게 다룰 지 옵션을 보여준다.(당장은 건드릴 필요가 없다.)

  • 그림6

ScriptableObject를 이용한 방식

사용 패키지 GitHub 주소: GitHub: Unity Excel Importer
Package 주소: https://github.com/mikito/unity-excel-importer.git?path=Assets/ExcelImporter#v0.1.1/upm

1. 그림7과 같이 데이터를 저장한다

  • 그림7

2. 그림8과 같은 형식으로 데이터를 받는다.

  • 그림8

3. 그림9와 같은 형식으로 데이터를 받는다. 29:00

  • 그림9

4. 그림10과 같은 형식으로 아이템DB를 만들고, 스크립트에서 꺼내쓰는 형식으로 사용 가능하다.

  • 그림10

5. 그림10과 같은 방법처럼 인덱스를 통해 접근하는 것보단,

그림11처럼 전체 순회가 가능한 Enumerator를 가져와서 접근하는 방식이 좋다.(고 생각한다-by YYC튜터님)
(캡슐화를 강조하기 때문에 직접적으로 사용하는 방식은 권장하지 않는다.)

  • 그림11

6. 그림12과 같이 모든 데이터가 저장되는 Database에 ItemDB들을 저장해서(우리 입장에서는 꼭 Item일 필요는 없음)

Database에 있는 DB들을 꺼내서 쓸 수 있음.

  • 그림12

7. 그림13, 14, 15처럼 id를 이용해, 메인 카테고리, 서브 카테고리, 개별 인덱스 형식으로 나눌 수도 있다.

  • 그림13

  • 그림14

  • 그림15

8. 그림16처럼 강화방법에 따른 데이터 저장법이 나뉠 수 있다.

(하지만, 우리는 아마 대부분의 상황에서 강화방법 1을 사용할 것이다.)

  • 그림16

9. (개인적인 의문)그림 17에서 정의한 타입이 그림18에서 자동으로 매칭이 되는가?

  • 그림17
  • 그림18

10. 그림19는 던전의 강화된버전들을 정리한 방법의 예시다(그림16의 강화방법 2 예시)

-> 그림 20처럼 추가했을 때의 인덱스를 고려해서 엑셀시트를 작성한다.

  • 그림19

  • 그림20

11. 그림21처럼 id를 테이블 번호와 카테고리 인덱스를 나눠서 작성한다.(그림13,14,15내용)

  • 그림21

12. 그림22처럼 하위 데이터를 테이블 별로 데이터를 관리를 하고,

그림23처럼 상위 데이터에 하위 데이터 테이블을 연결해서 사용한다.

  • 그림22

  • 그림23

13. 그림24처럼 행동과 타겟, 횟수로 퀘스트를 구분할 수 있다.

그림25처럼 행동과 타겟을 연결하고, 횟수를 부여하면 해당 조건이 되는 식으로 만들 수 있다.
완료되면, 그림26과 같은 형식으로 사용할 수 있다.
(우리의 프로젝트에서는 '게이트 종류에 상관없이 6회 클리어'라는 조건을 보여주지
않을 수 있지만, 기획자로서 데이터 테이블을 넣을 때, 어떤 조건인지를 보는 용도로도
사용 가능할 것이다.)

  • 그림24

  • 그림25

  • 그림26

14. 그림27 형식으로 테이블을 정리해서 사용하면 좋을 것이다.

  • 그림27

15. 계산의 정확도를 위해 그림28을 고려하거나, 글로벌 런칭을 고려하기 위해 그림29를 생각할 수도 있을 것이다.

  • 그림28

  • 그림29

16. 그림30처럼 버프수치 옆에 (%) 표시를 적어 단위에 대한 명확성을 보여주는 게 좋다.

  • 그림30

17. 그림31처럼 확률처럼 부동소수점 형식으로 처리가 될 때,

그림28에서의 얘기처럼 float보단 int를 쓰는 게 정확도에 도움이 될 것이다.

  • 그림31

  • 그림28

18. 부동소수점은 그림32처럼 이루어져 있으며,

그림33과 같은 표준 형식을 사용해서 사용할 수 있을 것이다.
그림34처럼 int의 표현범위를 고려해 9자리 수로 나타낼 수도 있을 것이다.

  • 그림32

  • 그림33

  • 그림34

19. 그림35: 그리고, 스트링은 모두 글자기 때문에, ID를 초기에는 너무 크게 잡지 않는 게 좋다.

하지만, 필요하다면 길어도 신경쓰지 말자.

  • 그림35
  1. 그림36처럼 float값을 가질 데이터와 int값을 가질 데이터를 고려하여 상황에 맞게 작성하자.
  • 그림36

21. 그림 37처럼 배율을 (100=1%)로 적용할 건지 정해서 엑셀시트에 입력할 수 있다.

  • 그림37

22. 그림38에 있는 isClear처럼 유저가 클리어 했는지에 대한 데이터는

유저의 행동에 의해 바꿀 수 있게 만든다.

  • 그림38

23. 그림39처럼 speed나 itemText라고 적기보단, moveSpeed와 attack스피드처럼 어떤 스피드인지,

itemName과 itemDescription처럼 어떤 Text인지 명확하게 해주는 것이 좋다.

  • 그림39

24. 그림40같은 동일한 내용은, 그림41처럼 통일하여 표현하는 것이 좋다.

(나쁜 사례: 그림42, 좋은 사례: 그림43)

  • 그림40

  • 그림41

  • 그림42

  • 그림43

25. 여러 데이터를 처리할 때, 그림44처럼 스킬을 3개 칸을 주고, 비어있으면 그냥 두거나,

','를 지우면서 다음 데이터들을 리스트로 가져올 수 있다.(JSON에서 썼던 거랑 비슷한 듯)

  • 그림44

26. 그림45처럼 그룹테이블을 만들어서 적용할 수도 있을 것이다.(우리가 처음 고려했던 것과 비슷)

  • 그림45

27. 그림46처럼 던전 이름을 ID값으로 다른곳에서 작성하게 만들면,

나중에 다국어 패치를 할 때, 해당 부분만 바꿔서 끼워주면 된다.

  • 그림46

28. 그림47처럼 작성하면, 문자열에 데이터를 넣어서 만들어 줄 수 있다.

  • 그림47

29. 실제 물리적인 파일은 그림48처럼 경로를 이용해서 추가할 수 있다.

  • 그림48

30. 그림49처럼 리소스와 경로를 따로 분리해서 저장도 가능

  • 그림49
profile
미숙한 초보 게임 개발자

4개의 댓글

comment-user-thumbnail
2024년 11월 27일

하루종일 TIL만 작성하셨나요??? 양과 질이 어마무시하군요. 우수 TIL 선정되신거 미리 축하드립니다

1개의 답글
comment-user-thumbnail
2024년 11월 27일

좋은 자료 참조 하겠습니다.

1개의 답글