STDIO
Tìm kiếm gần đây
    • Nội dung
    • QR Code
    • 0
    • 0
    • Sao chép

    Lưu Trữ Dữ Liệu trong Android với Unity

    Hướng dẫn đọc và ghi file trên Android với đường dẫn Application.dataPath, Application.streamingAssetPath, Application.persistentDataPath, Application.temporaryCachePath bằng Unity.
    04/04/2016
    24/09/2020
    3 phút đọc
    Lưu Trữ Dữ Liệu trong Android với Unity

    Chúng ta thường hay lưu trữ và quản lý file chỉ với đường dẫn cố định, và việc đọc ghi không cần quá nhiều bước. Nhưng đòi hỏi người tổ chức ghi hoặc đọc file phải biết chính xác đường dẫn đến file cần thao tác và có thể gây khó khăn cho việc sao chép sang máy khác.

    Bài viết sẽ giới thiệu và hướng dẫn sử dụng 4 đường dẫn mặc định mà Unity hỗ trợ sẵn cho việc lưu trữ và quản lý file là dataPath, streamingAssetPath, persistentDataPath, temporaryCachePath. Đồng thời cũng giới thiệu qua về cách đọc và ghi file trên hệ điều hành Android với Unity.

    Application.dataPath

    Đây là đường dẫn đến thư mục chứa dữ liệu của game, trong Android, dataPath là 1 đường dẫn private và nó chỉ cho phép đọc, không thể truy cập được đường dẫn này nếu không có quyền ROOT của hệ thống.

    string filePath = System.IO.Path.Combine(Application.dataPath, fileName);

    Application.persistentDataPath

    Đây cũng đường dẫn đến thư mục chứa dữ liệu của game. persistentDataPath thường được dùng cho việc lưu trữ và cập nhật trạng thái của game. Trong hệ điều hành Android, persistentDataPath cho phép đọc lẫn ghi, và dữ liệu không bị xóa khi cập nhật game.

    string filePath = System.IO.Path.Combine(Application.persistentDataPath, fileName);

    Application.streamingAssetPath

    Là đường dẫn đến thư mục StreamingAssets của game, streamingAssetPath thường được dùng để chứa các dữ liệu mặc định, các dữ liệu không thay đổi. Trong Android, bạn không thể truy cập trực tiếp vào thư mục StreamingAssets vì nó được nén lại trong file apk.

    string filePath = System.IO.Path.Combine(Application.streamingAssetsPath, fileName);

    Application.temporaryCachePath

    Là đường dẫn đến thự mục chứa các dữ liệu tạm. Ngoài mục đích là chứa các dữ liệu tạm của game, temporaryCachePath cũng có thể đọc và ghi tương tự persistentDataPath.

    string filePath = System.IO.Path.Combine(Application.temporaryCachePath, fileName);

    Đọc và ghi file trong Android

    Unity là 1 engine đa nền tảng, nên có thể sử dụng phương pháp đọc vài ghi file trong C# để đọc và ghi file.

    Lưu ý: Trên Android, dataPath và streamingAssetPath chỉ cho phép đọc, không thể tạo hoặc ghi dữ liệu vào file trong đường dẫn này trực tiếp trên android.

    Thao tác với streamingAssetPath

    Đối với streamingAssetPath, thường dùng đường dẫn này để đọc các dữ liệu khởi đầu, các dữ liệu mặc định, ... Các dữ liệu này không thể thay đổi trong suốt quá trình game vận hành.

    Tạo dữ liệu cho streamingAssetPath

    Để tạo dữ liệu cho streamingAssetPath, trong Unity Editor bắt buột phải có thư mục StreamingAssets trong thư mục Assets của project. Khi build project, Unity sẽ sao chép tất các các file trong thư mục này vào đường dẫn của Application.streamingAssetsPath.

    streamingAssetPath

    Đọc dữ liệu từ streamingAssetPath

    Trong Android các file được chứa trong streamingAssetPath đều được nén thành file .jar. Nên đường dẫn của streamingAssetPath có dạng: 

    streamingPath = "jar:file://" + Application.dataPath + "!/assets/";

    Sử dụng đến lớp WWW của Unity để đọc nội dung của file.

    string dataString;
    
    IEnumerator ReadDataStreamingAssets(string fileName)
    {
        string streamingPath = System.IO.Path.Combine(Application.streamingAssetsPath, fileName);
        WWW www = new WWW(streamingPath);
        yield return www;
        dataString = www.text;        
    }

    Để sử dụng phương thức trên cần dùng đến phương thức StartCoroutine.

    StartCoroutine(ReadDataStreamingAssets("gamesetting.json"));

    Lưu ý: phương thức ReadDataStreamingAssets trên chỉ dùng được trên Android, để ứng dụng có thể chạy được trên đa nền tảng phải tùy biến lại:

    IEnumerator ReadDataStreamingAssets(string fileName)
    {
        string streamingPath = System.IO.Path.Combine(Application.streamingAssetsPath, fileName);
        if (streamingPath.Contains("://"))
        {
            WWW www = new WWW(streamingPath);
            yield return www;
            dataString = www.text;
        }
        else
        {
            dataString = System.IO.File.ReadAllText(streamingPath);
        }
    }

    Điều kiện streamingPath.Contains("://") để xác định xem đường dẫn có chứa chuỗi "://" tương ứng với đường dẫn với streamingAssetPath trong Android.

    Mã nguồn tham khảo đầy đủ

    using System.Collections;
    using UnityEngine;
    
    public class ReadDataStreaming : MonoBehaviour
    {
        string dataString;
        void Start () {
            StartCoroutine(ReadDataStreamingAssets("gamesetting.json"));
            print(dataString);
        }
    
        IEnumerator ReadDataStreamingAssets(string fileName)
        {
            string streamingPath = System.IO.Path.Combine(Application.streamingAssetsPath, fileName);
            if (streamingPath.Contains("://"))
            {
                WWW www = new WWW(streamingPath);
                yield return www;
                dataString = www.text;
            }
            else
            {
                dataString = System.IO.File.ReadAllText(streamingPath);
            }
        }
    }
    0 Bình luận
    Lập Trình Game

    Lập Trình Game

    Kiến thức, kỹ thuật, kinh nghiệm lập trình game.

    Đề xuất

    Lưu Trữ Dữ Liệu với Shared Preferences trong Android
    Giới thiệu và hướng dẫn lưu trữ dữ liệu cơ bản trong Android bằng Shared ...
    Lưu Trữ Dữ Liệu với SQLite trong Android
    Giới thiệu cách lưu trữ dữ liệu, truy cập, thêm xóa và chỉnh sửa thông ...

    Khám phá

    Thao Tác với JSON trong Android
    Sử dụng JSON trong Android để giao tiếp và lưu trữ dữ liệu.
    Lưu Trữ Thông Tin Game với PlayerPrefs
    Hướng dẫn sử dụng và thao tác với class PlayerPrefs trong Unity để lưu ...
    Thuật Toán Nén Dữ Liệu RLE
    Trong quá trình lưu trữ cũng như truyền dữ liệu, việc nén dữ liệu là ...
    Sử Dụng JsonUtility Trong Lập Trình Game Với Unity
    Hướng dẫn sử dụng đối tượng JsonUtility tổng hợp dữ liệu thành chuỗi ...
    Cách Thức Lưu Trữ Hình Ảnh bằng Cấu Trúc Mat trong OpenCV
    Giới thiệu cách lưu trữ hình ảnh bằng cấu trúc dữ liệu Mat trong OpenCV ...
    Cơ Bản về Ảnh - Cách OpenCV Lưu Trữ Dữ Liệu Ảnh
    Khái niệm cơ bản về ảnh và cách lưu trữ dữ liệu ảnh trong OpenCV.
    Tạo High Score với Cocos2d-x 3.x.x
    Bài viết hướng dẫn lưu dữ liệu với các kiểu interger, float, double hay ...
    Biến và Kiểu Dữ Liệu trong Lua
    Giới thiệu biến, kiểu dữ liệu và cách khai báo biến và kiểu dữ liệu ...
    24/09/2014
    Khi bạn nhấn vào liên kết sản phẩm do STDIO đề xuất và mua hàng, STDIO có thể nhận được hoa hồng. Điều này hỗ trợ STDIO tạo thêm nhiều nội dung hữu ích. Tìm hiểu thêm.
    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
    developer@stdio.vn

    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

    Đã thông báo Bộ Công Thương
    ©STDIO, 2013 - 2020