从昨天晚上开始,我的Application.persistenDataPath
在代码中的一个地方不再工作了。我用了两次。第一次它工作了,第二次它不再工作了。
也许给你一个提示,我昨天经常保存json。而且我有无限循环,这可能导致应用程序设置崩溃。在Android Build上,它工作得很好。(我在两种用法中都得到了正确的路径)
- 我尝试过的代码 *
- 都在同一个类中。
- 统一2021.3.2f
- 使用Google Firebase
- Visual Studio 2022社区版
**这是它工作的代码:**我正在保存一张照片到给定的路径。
//then Save To Disk as PNG
byte[] bytes = avatarTexture.EncodeToPNG();
var dirPath = Application.persistentDataPath + "/Resources/User/";
if (!Directory.Exists(dirPath))
{
Directory.CreateDirectory(dirPath);
}
if (File.Exists(dirPath + "avatar" + ".png"))
{
File.Delete(dirPath + "avatar" + ".png");
}
File.WriteAllBytes(dirPath + "avatar" + ".png", bytes);
saveUserDataAsJson(getUserToken(user.DisplayName, user.Email));
_warningLoginText.text = "";
_confirmLoginText.text = Translation.authManager_login_notification_loginSucceeded;
**这是它不工作的代码:**我正在保存一个包含用户信息的JSON文件。
DataSnapshot snapshotYear = taskYear.Result;
_year = Convert.ToInt32(snapshotYear.Value);
FirebaseDatabaseUser tempUser = new FirebaseDatabaseUser(_token, _day, _month, _year);
var json = JsonConvert.SerializeObject(tempUser);
Debug.Log("Can see it in Console");
//After pressing Play Button in Unity
//Editor i get no Debug outprint here
Debug.Log(Application.persistentDataPath);
var folderPath = Application.persistentDataPath + "/Resources/User/";
Debug.Log("Can not see it in Console");
//HERE THE CODE STOPS AND NOTHING HAPPEN
//NO ERROR NO LOG NO FURTHER CODE WORKING
//HERE NOT WORKING ANYMORE
if (!Directory.Exists(folderPath))
{
Directory.CreateDirectory(folderPath);
}
if (File.Exists(folderPath + "userdata" + ".json"))
{
File.Delete(folderPath + "userdata" + ".json");
}
File.WriteAllText(folderPath + "userdata" + ".json", json);
我试过:
- 重建项目设置
- 在控制台中打印路径,它是空的“”
- 已清理GI缓存
- 已重新启动我的计算机
- 克隆项目新建
- 尝试使用
Application.dataPath
(仅用于调试测试,而不是在我的代码中使用它)也不工作在Unity播放模式,但在Android上它指向APK的权利。
第一次使用(在代码中工作的地方)我得到路径:电脑:C:\Users\{user}\AppData\LocalLow\{company}\{app}\Resources\User\
安卓系统:.\Android\data\com.{company}.{app}\...\Resources\User\
第二种用法(放置在代码中不起作用的地方)I get Path:电脑:“”安卓系统:“.\Android\data\com.{company}.{app}\...\Resources\User\
“
我希望有人能解释这个问题。我不能解决这个问题从我自己。需要有人谁有更多的背景知识。
1条答案
按热度按时间j9per5c41#
因此答案基于***@derHugo*的帮助:
有些Unity API只使用Unity主线程。
Application.persistentDataPath
是Unity API元素的一部分。因此,问题是,在第一个代码片段中,我使用了Unity主线程**,但在第二个代码片段中,我使用了后台线程。这很容易修复。我没有使用其他线程,而是使用了:重构提示此代码:
File.Exists
可以被删除,它是完全冗余的。WriteAllText
在默认情况下创建或覆盖该文件。public static readonly
路径并使用它们来代替。希望***@derHugo***的解决方案能帮助其他人。
如果你读到这篇文章,祝你有愉快的一天:)