gpt4 book ai didi

c# - Android Unity3d 限制 streamingAssetsPath 只有启动方法(更新设备/版本或设置?)

转载 作者:行者123 更新时间:2023-11-29 23:15:20 24 4
gpt4 key购买 nike

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

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

原始问题。我知道,要从 Android 上的 streamingAssetsPath 读取,我需要使用 UnityWebRequest 从 streamingAssetsPath 中获取并在协程中产生返回 unitywebrequest.SendWebRequest()。我还检查平台是否为 Android,因为在 PC 上我不需要使用 UnityWebRequest。通常我将一个 json 文件从 streamingAssetsPath 复制到 persistentDataPath 并从那里开始工作(因为我可以在 PC 和 Android/iOS 上的 persistentDataPath 上创建和修改文件)。我的问题是读取仅适用于 Start 方法(或 Start 方法上的协程)。我不知道为什么,但是当我尝试在运行时在 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 方法上复制文件来解决这个问题......主要问题是了解这一点),但如果我可以通过做一些我不知道的事情来做到这一点我想知道如何去做。

最佳答案

我在我的应用程序中实现了一个类似的方法,我能够在运行时从 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;

}

关于c# - Android Unity3d 限制 streamingAssetsPath 只有启动方法(更新设备/版本或设置?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55456414/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com