[Hướng Dẫn] Tạo cơ sở dữ liệu (Database) với Prefab

Dang_KhoaDang_Khoa Posts: 3,861Administrators
edited August 2019 in Unity
[chapter]Giới thiệu[/chapter]
Unity không hỗ trợ cơ sở dữ liệu Database nên mình xin hướng dẫn mọi người cách thiết lập một Database cho game. 

Lưu ý, Database này thuộc loại dữ liệu chung, ví dụ thông tin toàn bộ hero, item trong game, còn các dữ liệu riêng như số lượng bình HP mà người chơi đang sở hữu, hay các hero đang có trong party thì mình sẽ hướng dẫn ở một bài khác, và mình quy ước gọi dữ liệu riêng đó là Data để phân biệt với Database.

Nguyên tắc lưu trữ của mình là lưu mọi thông tin trong một Prefab, rồi khi sử dụng ta sẽ load Prefab đó lên và truy xuất Database từ nó.

Với cách lưu trữ này, ta sẽ có các ưu điểm sau:
  • Có thể lưu trữ mọi loại dữ liệu.
  • Có thể lưu các Object chứa Script hoặc component khác.
  • Có thễ lưu trữ Object chứa Object con.
  • Giao diện trực quan.
  • Truy xuất Database dễ dàng.
  • ...
[chapter]Download[/chapter]
Trước tiên bạn hãy download về, dùng Unity mở project lên rồi xem hướng dẫn bên dưới.

Bấm vào đây để tải về

[chapter]Hướng dẫn[/chapter]
Demo này tạo một Database đơn giản chứa thông tin các Item.

Trong project có chứa:

Script:
  • ItemData: Chứa thông tin của một Item, gồm có ID, tên Item, Object hình ảnh Item.
  • ItemDataScript: Chứa ItemData, dùng để gắn vào một Object, vì ItemData không phải Behavior nên không thể gắn vào được.
  • SceneController: Một ví dụ vể truy xuất Database và xuất lên màn hình Console.
Sprite:
  • IconSet: File hình ảnh của từng Item.
Prefab:
  • DatabaseItem: Chứa Database của toàn bộ Item.
Scene:
  • SceneDatabase: Scene tạm dùng để tạo Prefab chứa Database, khi xuất game ta không xuất Scene này nhé.
  • SceneGame: Scene chính, trong Scene này mình chỉ làm một việc là xuất toàn bộ dữ liệu của Database lên Console.
[chapter]Ghi chú[/chapter]

Demo mình làm đơn giản nhất có thể, mọi người xem, nếu có gì thắc mắc cứ hỏi tại đây nhé. 

Và mình cũng nói luôn, đây là một phần trong các bài hướng dẫn tạo Inventory do một mem yêu cầu  :D

Comments

  • Ryu KamiRyu Kami Posts: 14Registered
    Hàng nóng, a e ủng hộ nào, thanks ngay kẻo nguội :))), cái vụ giữ data ở 1 scene khác giống kiểu XAS hồi rpg maker nhỉ, giữ liệu weapon nằm hết ở 1 map khác :)))
  • Dang_KhoaDang_Khoa Posts: 3,861Administrators
    Ryu Kami wrote:
    Hàng nóng, a e ủng hộ nào, thanks ngay kẻo nguội :))), cái vụ giữ data ở 1 scene khác giống kiểu XAS hồi rpg maker nhỉ, giữ liệu weapon nằm hết ở 1 map khác :)))

    Thật ra nói đúng hơn thì cái "Map" (đúng ra là cái Scene) đó chỉ dùng để thiết kế Database, sau đó mình lưu lại dưới dạng Prefab, lưu xong, có Prefab rồi thì cái "Map" đó không cần dùng làm gì nữa (nên khi xuất game ta không cần tới nó).

    Tuy nhiên Unity chỉ cho hiển thị các Object con cấp 1 của Prefab, còn các Object con ở cấp 2 trở lên sẽ không được hiển thị, nên việc thiết kế ở một Scene riêng giúp ta dễ dàng nhìn thấy các Object cấp 2 trở lên, để dễ dàng sửa chửa, thay đổi. Sau khi thay đổi xong thì chỉ việc nhấn Apply để nó lưu trở lại vào Prefab :D
  • kumuzukumuzu Posts: 669Registered
    down về dùng không được mình dùng Unity bản 4.6.1f nhé ko biết thê nào mà mã hóa ko xem được cái gì ~.~
  • Dang_KhoaDang_Khoa Posts: 3,861Administrators
    kumuzu wrote:
    down về dùng không được mình dùng Unity bản 4.6.1f nhé ko biết thê nào mà mã hóa ko xem được cái gì ~.~

    À, cái này dùng Unity mới nhất là 5.1 nha :P
  • kumuzukumuzu Posts: 669Registered
    I need help inventory 4.6 -_-
  • Dang_KhoaDang_Khoa Posts: 3,861Administrators
    kumuzu wrote:
    I need help inventory 4.6 -_-

    @kumuzu nâng cấp Unity lên 5.1 đi, nó sẽ tự động update dự án hiện tại lên 5.1 nên không sợ mất dữ liệu đâu  :D
  • kumuzukumuzu Posts: 669Registered
    5.1 phiên bản 5 vẫn nhiều lỗi và code một số có thay đổi lên mình để bản 4 thôi.
  • Dang_KhoaDang_Khoa Posts: 3,861Administrators
    Theo yêu cầu, mình sẽ update thêm một demo cho bản 4.6.x, nếu có thời gian thì mình sẽ post thêm một hướng dẫn mới trong thời gian sớm nhất :D
Sign In or Register to comment.