Logo
Published on
8

Excel2Unity - Giải pháp Static Database toàn diện cho mid-hard core game

1. Giới thiệu

Trong phát triển game, Static Database là một giải pháp lưu trữ các dữ liệu tĩnh như Skills, Items, NPC mà không thay đổi trong suốt quá trình chơi game. Thay vì đọc dữ liệu từ nguồn động (Dynamic Database), chúng ta sử dụng các phương tiện như ScriptableObject, CSV, hoặc JSON để lưu trữ và quản lý thông tin. Đây là giải pháp nhanh và khá tiện lợi trong quá trình phát triển game.

Tuy nhiên, trong quá trình phát triển game, chúng ta thường xuyên đối mặt với những thay đổi, nhiều khi cần mở rộng hoặc thay đổi thiết kế, việc phải điều chỉnh tính năng và cấu trúc cơ sở dữ liệu là không thể tránh khỏi. Sử dụng những phương pháp thông thường như ScriptableObject, CSV hoặc JSON để quản lý Static Database có thể không đủ đáp ứng khi chúng ta đối mặt với hệ thống lớn, như trong các game Mid-core trở lên. Quản lý dữ liệu khổng lồ này mà không có công cụ hỗ trợ là một sự phiền toái. Đây là thách thức khi Static Database trở nên quá lớn.

2. Excel to Unity

Ý tưởng cốt lõi đằng sau công cụ này là tạo ra một công cụ phục vụ cho Indie Game Developer. Đây là một công cụ giúp thiết kế và quản lý database mà cả Dev và Designer đều có thể sử dụng. Designer có thể dễ dàng kiểm tra các chỉ số trong game mà không cần sự hỗ trợ của Dev.

Dự án game, không phân biệt quy mô lớn hay nhỏ, đều cần có một Static Database. Khi dự án phát triển, nhu cầu về Data Table, Constants và ID cũng tăng lên. Nếu không có một giải pháp quản lý hiệu quả, điều này có thể trở nên phức tạp. Công cụ này nhằm đơn giản hóa quá trình này bằng cách quản lý ID và Constants, và cho phép dễ dàng tìm kiếm, chỉnh sửa và cập nhật các yếu tố này cùng với các bảng dữ liệu.

Theo thời gian, công cụ đã hỗ trợ thêm được nhiều kiểu dữ liệu và tận dụng khả năng của Excel cho thiết kế và quản lý. Mặc dù nó được phát triển chủ yếu cho các Game RPG, thể loại thường có Static Database lớn, nhưng nó cũng có thể được sử dụng cho các thể loại game khác yêu cầu Static Database lớn.

Download from GitHub
Nếu công cụ hữu ích cho bạn thì hãy gửi tặng một ⭐ nhé.

3. Các chức năng chính

  • Hỗ trợ quản lý Database hoàn toàn bằng Excel.
  • Quản lý IDs và Constants một cách hiệu quả, cho phép điều chỉnh hàng loạt mà không ảnh hưởng đến Database.
  • Quản lý đa ngôn ngữ dễ dàng thông qua hệ thống Localization, dễ dàng tích hợp với Unity.
  • Cung cấp nhiều định dạng dữ liệu, có thể thay đổi linh hoạt theo yêu cầu thiết kế Data.
  • Xuất Data Table thành các file json để.

4. Giới thiệu tính năng và cách cài đặt

4.1. Export single excel

Export Single Excel

Đây là một chức năng cơ bản nhưng lại rất quan trọng, giúp bạn làm quen với các công cụ. Nếu Static Database của bạn không quá lớn hoặc phức tạp, và chỉ cần một file excel để chứa tất cả dữ liệu, thì chức năng này là đủ cho nhu cầu của bạn. Tuy nhiên, nếu Static Database của bạn phức tạp và cần được lưu trữ trong nhiều file Excel, bạn sẽ cần sử dụng chức năng Export Multi Excels. Chức năng này sẽ được giới thiệu trong phần tiếp theo.

Các chức năng quan trọng nằm ở các nút bên phải:

  • Export IDs: xuất các sheet dạng IDs thành các file C#.
  • Export Constants: xuất các sheet dạng Constants thành các file C#.
  • Export Localization: xuất Localization Data và Localization Component, Localization API tương ứng.
  • Export Json: xuất các sheet dạng Data Table thành JSON data.

4.2. Export multi excels (All in one)

Export Multi Excels (All in one)

Đây là chức tổng hợp, tất cả sẽ được xử lý chỉ bằng một nút ấn chỉ cần:

  1. Chọn tất cả các file excel mà bạn muốn xử lý.
  2. Bạn có thể quyết định xuất IDs, Constants hoặc không bằng cách đánh dấu vào CheckBox tương ứng với mỗi file excel.
  3. Cuối cùng, hãy nhấn nút Export All.

4.3. Settings

Settings
  • Json Data Output: Data table sẽ được chuyển đổi thành dạng dạng JSON Data và lưu tại địa chỉ này.
  • Constants Output: IDs, Constants, Localization Component và Localization API sẽ được lưu tại đại chỉ này.
  • Localization Ouput: Data Localization sẽ được lưu tại đại chỉ này. Địa chỉ này nên nằm trong thư mục Resources.
  • Namespace: khai báo namespace cho các file C# mà tool xuất ra.
  • Separate IDs:
    • TRUE: xuất các sheet [%IDs] thành các file C# độc lập với tên file theo cấu trúc [SheetName] + IDs.cs
    • FALSE: tổng hợp tất cả các sheet [%IDs] từ tất cả các file excel thành một rồi xuất thành một file C# duy nhất là IDs.cs
  • Separate Constants:
    • TRUE: xuất các sheet [%Constants] thành các file C# độc lập với tên file theo cấu trúc [SheetName] + %Constants.cs
    • FALSE: tổng hợp tất cả các sheet [%Constants] từ tất cả các file excel thành một rồi export thành một file C# duy nhất là Constants.cs
  • Separate Localization:
    • TRUE: xuất các sheet [%Localization%] thành các nhóm độc lập, một nhóm bao gồm Localization Data, Component và API, tên các file sẽ có cấu trúc sau:
      • Localization Data: [SheetName]_[language].txt
      • Component: [SheetName] + Text.cs
      • API: [SheetName].cs
    • FALSE: tổng hợp tất cả các sheet [%Localization%] từ tất cả các file excel thành một rồi xuất thành một nhóm duy nhất, tên các file sẽ có cấu trúc sau:
      • Localization Data: Localization_ + [language].txt
      • Component: LocalizationText.cs
      • API: Localization.cs
  • Encript Json: mã hóa JSON Data trước khi xuất thành text file
  • Only enum as ID: áp dụng cho sheet [%IDs], các cột có phần mở rộng là [enum]. Nếu chọn thì cột IDs đó sẽ được xuất dưới dạng enum mà bỏ qua dạng Integer Constant.
  • One Json - One Excel: tổng hợp Data Table trong một file excel thành một file json duy nhất, tên file theo cấu trúc [ExcelName].txt
  • Encryption Key: key để mã hóa JSON data
  • Language maps: ứng dụng cho Localization kết hợp TextMeshPro, dùng để tổng hợp bảng ký tự của một ngôn ngữ. Chủ yếu được áp dụng cho Korean, Japanese và Chinese đây là các ngôn ngữ có hệ thống ký tự cực kỳ lớn.
  • Excluded Sheets: nhập tên các Sheet cần bỏ qua khi xử lý Data Table.
  • Excluded Sheets: nhập tên các trường cần bị bỏ qua khi xử lý Data Table.

4.4. Encrypt & Decrypt Text

Encryption

Chức năng này cho phép bạn mã hóa hoặc giải mã một chuỗi ký tự dựa trên Key được cung cấp trong Tab Settings. Bạn có thể sử dụng chức năng này để bảo mật nội dung của một văn bản, hoặc để mở và đọc các file JSON data đã được mã hóa sau khi xuất ra.

5. Quy tắc thiết kế data trong Excel

Download detail example from GitHub

5.1. IDs

Các sheet có tên theo cú pháp [%IDs] được gọi là IDs sheet. Chúng được sử dụng để tổng hợp tất cả id thành Constants Integer.

HeroBuildingPetGender[enum]
HERO_11commentBUILDING_NULL0commentPET_NULL0commentGENDER_NONE0
HERO_22commentBUILDING_11PET_11GENDER_MALE1
HERO_33commentBUILDING_22PET_22GENDER_FEMALE2
BUILDING_33PET_33GENDER_HELICOPTER3
BUILDING_44PET_44
BUILDING_55PET_55
BUILDING_66PET_66
BUILDING_77PET_77
BUILDING_88
  • Mỗi id được khai báo trong một nhóm bao gồm 3 cột liền nhau: cột 1 là Key, cột 2 là Value và cột 3 là Comment. Ví dụ trên đây minh họa cho 3 nhóm id: Hero Id, Building Id và Pet Id.
  • Nêu thêm hậu tố [enum] vào tên của cột, thì giá trị trong cột đó vừa được xuất ra với kiểu Constant Integer vừa được xuất ra với kiểu enum. Bạn cũng có thể lựa chọn export chỉ kiểu enum tại Tab Settings.

5.2. Constants

Các sheet được đặt tên theo cú pháp [%Constants] được gọi là Constants Sheet. Chúng được sử dụng để tổng hợp lại các Constants trong project. Bảng dưới đây sẽ giúp bạn tham khảo được tất cả các kiểu dữ liệu mà có thể dùng trong sheet này.

NameTypeValueComment
EXAMPLE_INTint83Integer Example
EXAMPLE_FLOATfloat1.021Float example
EXAMPLE_STRINGstring321fdaString example
EXAMPLE_INTARRAY_1int-array4Integer array example
EXAMPLE_INT_ARRAY_2int-array0:3:4:5Integer array example
EXAMPLE_FLOAT_ARRAY_1float-array5FLoat array example
EXAMPLE_FLOAT_ARRAY_2float-array5:1:1:3FLoat array example
EXAMPLE_VECTOR2_1vector21:2Vector2 example
EXAMPLE_VECTOR2_2vector21:2:3Vector2 example
EXAMPLE_VECTOR3vector33:3:4Vector3 example
EXAMPLE_REFERENCE_1intHERO_1Integer example
EXAMPLE_REFERENCE_2int-arrayHERO_1 : HERO_2Integer array example
EXAMPLE_REFERENCE_3int-arrayHERO_1 | HERO_3Integer array example
EXAMPLE_REFERENCE_4int-arrayHERO_1 HERO_4Integer array example
EXAMPLE_FORMULA_1int=1*10*36Excel formula example
EXAMPLE_FORMULA_2float=1+2+3+4+5+6+7+8+9Excel formula example
  • Với kiểu dữ liệu array (in-array, float-aray, string-array), các phần tử trong mảng được phân tách bởi dấu : hoặc |

5.3. Localization

Các sheet được đặt tên theo cú pháp [%Localization%] được gọi là Localization Sheet.

idstringrelativeIdenglishspanish
message_1this is english message 1este es el mensaje en ingles 1
message_2this is english message 2este es el mensaje en ingles 2
message_3this is english message 3este es el mensaje en ingles 3
content1this is english message 1este es el mensaje en ingles 1
content2this is english message 2este es el mensaje en ingles 2
content3this is english message 3este es el mensaje en ingles 3
title_1this is english title 1este es el titulo 1 en ingles
title_2this is english title 2este es el titulo 2 en ingles
title_3this is english title 3este es el titulo 3 en ingles
whatever_msgthis is a sample messageeste es un mensaje de muestra
hero_nameHERO_1hero name 1nombre del héroe 1
hero_nameHERO_2hero name 2nombre del héroe 2
hero_nameHERO_3hero name 3nombre del héroe 3
  • Key được tạo cho mỗi dòng là kết hợp của 2 cột idstringrelativeId. vd content_1, content_2, ...
  • HERO_1, HERO_2, ... là tham chiếu tới id tương ứng trong sheet IDs. Như vậy Key tương ứng sẽ là hero_name_1, hero_name_2, ...
idstringrelativeIdenglishspanish
content1this is english message 1este es el mensaje en ingles 1
2this is english message 2este es el mensaje en ingles 2
3this is english message 3este es el mensaje en ingles 3
hero_nameHERO_1hero name 1nombre del héroe 1
HERO_2hero name 2nombre del héroe 2
HERO_3hero name 3nombre del héroe 3
  • Các ô có giá trị giống nhau trong một cột thì có thể Merge thành một ô duy nhất

5.4. Data table - JSON data

Kiểu dữ liệu cấp cơ bản: Boolean, Number, String

numberExample1numberExample2numberExample3boolExamplestringExample
1101.2TRUEtext
2203.1TRUEtext
3BUILDING_85FALSEtext
6HERO_310.7FALSEtext
9PET_216.4FALSEtext

Kiểu dữ liệu mở rộng: Array, JSON object

array1[]array2[]array3[]array4[]array5[]array6[]json{}
text111TRUE123
66
aaa
ccc
{}
text22 | 2 | 31 | 2 | 3TRUE | FALSE | TRUE123
71
aaa
ccc
{"id":1, "name":"John Doe 1"}
text1 | text21 | 21 | BUILDING_2TRUE | FALSE123
67
aaa
ccc
{"id":2, "name":"John Doe 2"}
text1 | text2 | text31 | 2 | 3BUILDING_1 | HERO_2TRUE | FALSE | TRUE123
68
aaa
ccc
{"id":HERO_2, "name":"JohnDoe 2"}
text34 | 2BUILDING_3 | HERO_1 | HERO_2TRUE | FALSE123
76
aaa
ccc
[{"id":HERO_1, "name":"John Doe 1"},{"id":HERO_2, "name":"Mary Sue 2"}]
text1 | text2 | text751 | 2 | 4 | PET_5TRUE123
78
aaa
ccc
[{"id":HERO_1, "name":"John Doe 1"},{"id":HERO_2, "name":"Mary Sue 2"}]
  • Kiểu array thì tên cột phải có hậu tố []
  • Kiêu JSON object thì tên cột phải có hậu tố {}

Kiểu dữ liệu đặc biệt: Atribute

attribute0value0unlock0increase0max0attribute1value1[]unlock1[]increase1[]max1[]...attributeN
ATT_HP3021.28...
ATT_AGI2531.58...
ATT_INT30215ATT_CRIT3 | 20 | 110.5 | 110 | 20...
ATT_ATK30218ATT_CRIT10 | 11 | 121.5 | 110 | 20...
ATT_CRIT10 | 11 | 121.5 | 110 | 20...

Attribute là một dạng dữ liệu đặc thù, được tạo ra đặc biệt cho các Game thuộc thể loại RPG - nơi mà nhân vật và trang bị có thể sở hữu nhiều thuộc tính và chỉ số khác nhau, không cố định. Dạng dữ liệu này giúp việc tùy chỉnh nhân vật và trang bị trở nên linh hoạt hơn, không bị hạn chế.

Attribute example

Quy tắc định nghĩa một Attribute sẽ được giới thiệu chi tiết trong bài viết sau.

Bài viết này đến đây thôi, trong bài viết kế tiếp chúng ta sẽ học cách sử dụng trong một dự án thực tế