Android Unity3d限制仅限streamingAssetsPath启动方法(更新的设备/版本或设置?)

问题描述 投票:1回答:1

编辑02 2014年4月02日.Jambla帮助我现在几乎可以肯定这不是UnityWebRequest的限制或错误,因为现在我知道我在项目中使用的相同代码适用于Jambla。由于代码还可以,我认为只有两个可用的解决方案:1。问题是Android版本/设备的组合。我会尽快尝试其他设备。 2.我的项目在构建设置中有一个设置,阻止我的游戏在Start方法之后从streamingAssetsPath复制文件(我可以确认它不是在启动之后,因为如果我尝试在启动后启用游戏对象并且该对象获得了一个脚本,尝试在Start方法中复制它仍然可以工作)。

如果有人知道什么设置导致此行为,请回答此问题。如果您在Android和/或设备版本上遇到相同的行为,请告诉我什么设备/版本。

原始问题。我知道,要从Android上的streamingAssetsPath读取,我需要使用UnityWebRequest来自streamingAssetsPath并在Coroutine中返回unitywebrequest.SendWebRequest()。我还检查平台是否是Android,因为在PC上我不需要使用UnityWebRequest。通常我将一个json文件从streamingAssetsPath复制到persistentDataPath并从那里工作(因为我可以在DOS和Android / iOS上创建和修改文件在persistentDataPath上)。我的问题是该读取仅适用于Start方法(或Start方法上的Coroutine)。我不知道为什么,但是当我尝试在android上运行时从streamingAssetsPath读取文件时(例如在Update或从按钮调用的方法中)我无法做到这一点。我想知道这是Android / Unity限制还是我可以解决它。

我的代码是这样的(此代码仅适用于Android部分):

string fileUrlPath = Path.Combine(Application.streamingAssetsPath, "myjsonfile.json");
UnityWebRequest www = UnityWebRequest.Get(fileUrlPath);
yield return www.SendWebRequest(); //this is where the Coroutine fail if not on Start method

之后我通常使用File.WriteAllBytes将我的json复制到persistentDataPath。

一旦我知道这是否是一个限制我仍然可以继续(我可以通过在Start方法上复制文件来解决这个问题...主要的问题是知道这一点),但如果我可以通过做某事我不知道我想知道该怎么做。

c# android unity3d
1个回答
1
投票

我正在我的应用程序中实现一个类似的方法,我能够在运行时读取streamingAssetsPath。

这是我的实现:

private void LoadGameData()
{
    #if UNITY_EDITOR
    string filePath = Path.Combine (Application.streamingAssetsPath, gameDataFileName);

        if (File.Exists (filePath)) {
            string dataAsJson = File.ReadAllText (filePath);
            GameData loadedData = JsonUtility.FromJson<GameData> (dataAsJson);
            allRoundData = loadedData.allRoundData;
        } else 
        {
            Debug.LogError ("Cannot load game data!");
        }
    #elif UNITY_ANDROID
        string path = Application.streamingAssetsPath + "/data.json";
        WWW www = new WWW(path); 
        while(!www.isDone){}
        string dataAsJson1 = www.text;
        GameData loadedData1 = JsonUtility.FromJson<GameData> (dataAsJson1);
        allRoundData = loadedData1.allRoundData;
    #endif
}

这是另一个适用于Android和编辑器的实现:

private void LoadGameData()
{
    StartCoroutine(GetText());
}

IEnumerator GetText()
{
    string path = Application.streamingAssetsPath + "/data.json";
    UnityWebRequest www = UnityWebRequest.Get(path);
    yield return www.SendWebRequest();
    Debug.Log("Loaded Q's");
    string dataAsJson1 = www.downloadHandler.text;
    GameData loadedData1 = JsonUtility.FromJson<GameData>(dataAsJson1);
    allRoundData = loadedData1.allRoundData;

}
© www.soinside.com 2019 - 2024. All rights reserved.