STDIO
Tìm kiếm gần đây

    Nội dung

    Sử Dụng JsonUtility Trong Lập Trình Game Với Unity

    21/09/2014
    10/12/2017
    Hướng dẫn sử dụng đối tượng JsonUtility để tạo chuỗi JSON trong Unity. Trong lập trình game việc tổng hợp dữ liệu để lưu trữ là rất khó khăn. Do đó Unity đã hỗ trợ tổng hợp dữ liệu thành chuỗi JSON và ngược lại thông qua đối tượng JsonUtility.

    Giới thiệu

    Trong quá trình làm game với Unity, các bạn thường gặp vấn đề với việc lưu trạng thái game (bảng điểm, bảng xếp hạng…) khi thoát game. Giải pháp cho vấn đề này là ghi dữ liệu xuống file, nhưng việc tổng hợp để tạo ra chuỗi dữ liệu để ghi xuống file khá phức tạp, việc lấy dữ liệu từ chuỗi được đọc từ file còn phức tạp hơn. Trong Unity, JsonUtility là đối tượng dùng để thao tác với dữ liệu JSON và đây cũng chính là cách nhiều lập trình viên lựa chọn để lưu lại trạng thái người chơi trong game. Bài viết này sẽ hướng dẫn các bạn sử dụng JsonUtility trong Unity.

    Tạo chuỗi JSON từ 1 đối tượng

    Đầu tiên, ta phải chắc chắn rằng đối tượng cần lấy dữ liệu thuộc về kiểu dữ liệu sử dụng Serializer JSON.

    using System;
    
    [Serializable]
    public class Setting{
        public string Language;
        public bool Sound;
        public int Volume;
    }

    Việc đặt [Serializable] trước khai báo lớp để lớp được sử dụng với Serializer JSON.

    Khởi tạo vá gán giá trị cho đối tượng:

    GameSetting gameSetting = new GameSetting();
    gameSetting.Language = "en";
    gameSetting.Sound = false;
    gameSetting.Volume = 30;

    Để tạo một chuỗi JSON từ dữ liệu của gameSetting, ta sử dụng phương thức ToJson của JsonUtility.

    string settingJSON = JsonUtility.ToJson(gameSetting);

    Khi đó giá trị settingJSON sẽ là một chuỗi như sau:

    {"Language":"en","Sound":false,"Volume":30}

    Đây chính là chuỗi JSON, ta chỉ việc ghi xuống file để lưu trữ.

    Chuyển dữ liệu từ chuỗi JSON sang đối tượng

    Ở phần này, ta cũng phải chắc rằng đối tượng cần được gán dữ liệu có kiểu dữ liệu sử dụng Serializer JSON. Tôi sẽ sử dụng lại lớp GameSetting trên để làm ví dụ:

    GameSetting loadSetting = JsonUtility.FromJson<GameSetting>(settingJSON);

    Ở đây, phương thức FromJson sẽ khởi tạo một đối tượng có kiểu là GameSetting có giá trị tương ứng với các từ khóa trong chuỗi JSON.

    Trong trường hợp ta có sẵn một đối tượng và cần cập nhật dữ liệu từ một chuỗi JSON vào đối tượng có sẵn đó. Ta dùng phương thức FromJsonOverwrite.

    JsonUtility.FromJsonOverwrite(jsonString, gameSetting);

    FromJsonOverwrite khá giống với FromJson ngoại trừ việc phương thức này không tạo mới một đối tượng mà chỉ cập nhật lại các giá trị của đối tượng sẵn có tương ứng với mỗi từ khóa trong chuỗi JSON.

    Mã nguồn

    File GameSetting.cs:

    using System;
    using UnityEngine;
     
    [Serializable]
    public class GameSetting{
        public string Language;
        public bool Sound;
        public int Volume;
     
        public static GameSetting CreateFromJSON(string jsonString)
        {
            return JsonUtility.FromJson<GameSetting>(jsonString);
        }
     
        public void LoadFormJSON(string jsonString)
        {
            JsonUtility.FromJsonOverwrite(jsonString, this);
        }
     
        public string SaveToJSON()
        {
            return JsonUtility.ToJson(this);
        }
    }

    File Main.cs:

    using UnityEngine;
     
    public class Main : MonoBehaviour {
     
        
        // Use this for initialization
        void Start () {
            GameSetting gameSetting = new GameSetting();
            gameSetting.Language = "en";
            gameSetting.Sound = false;
            gameSetting.Volume = 30;
            string settingJSON = gameSetting.SaveToJSON();
            print(settingJSON);
     
            GameSetting loadSetting = GameSetting.CreateFromJSON(settingJSON);
     
            gameSetting.LoadFormJSON(settingJSON);
        }
    	
    	// Update is called once per frame
    	void Update () {
    		
    	}
    }

    Lưu ý: Để chạy mã nguồn, ta phải thêm file Main.cs vào bất kỳ một object trong scene.

    Download

    Các bạn có thể download mã nguồn tại đây.

    Tham khảo

    Bài viết liên quan

    Tư Duy Tối Ưu Hóa Trong Lập Trình Games - Phần 1: Codes Trong C/C++

    Bài viết hướng tối ưu hóa trong lập trình với C++, tối ưu hóa lập trình C++ với games, bài viết hướng games bởi vì games đòi hỏi hiệu năng rất cao, và các games lớn thông ...

    La Kiến Vinh18/09/2014

    Hiện Thực Game Zero Với Unity - Phần 1 - Nhận Sự Kiện Button

    Tôi tiếp tục chuỗi bài viết giúp bạn đọc xây dựng một game đơn giản thực tế: Hướng Dẫn Hiện Thực Game Zero Với Unity. Qua chuỗi bài viết, hi vọng bạn đọc sẽ dễ dàng hơn ...

    Rye Nguyen09/08/2015

    Sử Dụng Bluetooth Xây Dựng Multiplayer Game Với Unity

    Việc hỗ trợ nhiều người chơi là xu hướng tất yếu hiện nay của nhiều game. Thông thường, những người chơi được kết nối với nhau thông qua mạng Internet hay mạng nội bộ ...

    Bùi Nguyễn Minh Hoàng03/09/2015

    Áp Dụng Kĩ Thuật OOP Trong Quá Trình Xây Dựng Framework Dựa Trên Thư Viện SDL

    Trong quá trình xây dựng Engine của bản thân mình, thông qua bài viết Khởi Tạo Môi Trường Lập Trình Game Sử Dụng Thư Viện SDL (Simple DirectMedia Layer) của Nghĩa Nguyễn ...

    Hoàng Thái09/09/2015

    Xử Lý Toán Học Trong Unity

    Toán học rất quan trọng trong việc phát triển game, cho dù là ở bất cứ nền tảng nào. Đối với Unity, lập trình viên được cung cấp khá nhiều các hàm toán học hỗ trợ lập ...

    Lê Thắm29/03/2016

    Ứng Dụng Của StartCoroutine Trong Unity

    Khi tiếp nhận và xử lý các sự kiện thu được, có những lúc chúng ta cần một khoảng thời gian chờ giữa việc nhận được sự kiện và xử lý sự kiện. Có khá nhiều những trường ...

    Rye Nguyen08/08/2015

    Tổng Quan Về Ngôn Ngữ Lập Trình JavaScript

    JavaScript là một ngôn ngữ lập trình được sử dụng phổ biến để lập trình web cũng như lập trình game trên nền web hiện nay. JavaScript được coi như là bắt buộc phải học ...

    Nguyễn Nghĩa14/11/2015

    Lưu Trữ Thông Tin Game Với PlayerPrefs

    Lưu điểm số, thông tin hay trạng thái game là điều quan trọng và là nhu cầu chung trong bất kì game nào. Đối với Unity, công việc này đã được hỗ trợ bằng lớp PlayerPrefs. ...

    Phạm Ngọc Phước12/03/2016

    Hiện Thực Quadtree Và Ứng Dụng Trong Lập Trình Game

    Xét va chạm (Collision Detection) là một việc quan trọng trong lập trình game. Công việc này đòi hỏi chi phí cao, đặc biệt khi số lượng thực thể (entity) trong game là ...

    Rye Nguyen31/07/2015

    Vector Trong Unity

    Trong môi trường game 3D, một vị trí hay vector được biểu diễn bằng 3 con số, đại diện cho 3 chiều không gian tương ứng. Trong Unity, Lớp Vector3 được sử dụng để biểu ...

    Rye Nguyen08/08/2015

    STDIO
    Trang chính
    Công ty TNHH STDIO

    30, Trịnh Đình Thảo, Hòa Thạnh, Tân Phú, Hồ Chí Minh
    +84 28.36205514 - +84 942.111912
    [email protected]

    383/1 Quang Trung, Phường 10, Quận Gò Vấp, Hồ Chí Minh
    Số giấy phép ĐKKD: 0311563559 do sở Kế hoạch và Đầu Tư TPHCM cấp ngày 23/02/2012

    ©STDIO, 2013 - 2020