0

我正在使用 Unity3D 为 ios 和 android 开发 2D 手机游戏。游戏需要将 JSON 响应保存到文件中。我为此使用 NGUI 和 MiniJSON。我想知道如何从 www 函数开始实现它以获取 JSOn 响应并将其保存到文件(包括路径)并从其他脚本加载它。如果太多,请举个例子。

谢谢

4

1 回答 1

1

我还没有测试代码,但它可能会给你一个想法:-)

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System.IO;

public class WWWJsonTest : MonoBehaviour
{
    private const float SECONDS_BEFORE_TIMEOUT = 10;

    private const string URL = "INSERT URL HERE";

    private const string FILE_PATH = "INSERT FILE PATH";

    public void DownloadAndSave()
    {
        StartCoroutine(DownloadCoroutine());
    }

    public Dictionary<object, object> GetSavedData()
    {
        // Use ReadContents() and do your MiniJSON magic here
        return null;    
    }

    private IEnumerator DownloadCoroutine()
    {
        var requestHeaders = new Hashtable()
        {
            { "Connection", "close"},
            { "Accept", "application/json"}
        };

        using(var request = new WWW(URL, null, requestHeaders))
        {
            float timeStarted = Time.realtimeSinceStartup;

            while(!request.isDone)
            {
                // Check if the download times out
                if(Time.realtimeSinceStartup - timeStarted > SECONDS_BEFORE_TIMEOUT)
                {
                    Debug.Log("Download timed out");
                    yield break;
                }

                yield return null;
            }

            // Check for other errors
            if(request.error != null)
            {
                Debug.Log(request.error);

                yield break;
            }


            SaveContents(request.text);
        }
    }

    private string ReadContents()
    {
        string ret;

        using(FileStream fs = new FileStream(FILE_PATH, FileMode.Open))
        {
            BinaryReader fileReader = new BinaryReader(fs);

            ret = fileReader.ReadString();

            fs.Close();
        }

        return ret;
    }

    private void SaveContents(string text)
    {
        using(FileStream fs = new FileStream(FILE_PATH, FileMode.Create))
        {
            BinaryWriter fileWriter = new BinaryWriter(fs);

            fileWriter.Write(text);

            fs.Close();
        }
    }   
}
于 2013-05-16T07:59:16.557 回答