我尝试编写脚本,以便在该插槽中找到保存文件后,保存按钮的文本会发生变化。但是,无论我做什么,我的脚本似乎都找不到该文件。这就是我现在所拥有的。
if (File.Exists ("save1.dat")) {
//set button text
} else {
Debug.Log ("Failure");
}
我已尝试过多种不同的变体。 我已尝试使用不同的文件,不同的文件扩展名,包括Application.dataPath,使用Resources.Load,但没有任何作用。出于某种原因,这些函数似乎无法在我的Unity项目中找到任何文件,尽管我可以在统一编辑器和我的文件浏览器中清楚地看到它们。这可能是什么原因造成的?有办法绕过这个吗?
答案 0 :(得分:2)
您要求的文件路径不是有效的文件路径。您需要使用Application.dataPath
作为根目录,并确保在附加文件之前以/
结束。您可能还必须将\
替换为/
(查看我自己的代码)。
这是一个大杂烩,但我用它来确定文件IO的应用程序目录:
public static class Configuration {
public static string currentBaseDirectory = "";
public static string currentDirectory = "";
public static void loadCurrentDirectory ()
{
currentDirectory = Application.dataPath;
currentDirectory = currentDirectory.Replace( @"\", "/" );
bool hasFoundMatch = false;
if ( !currentDirectory.EndsWith( "/" ) )
currentDirectory += "/";
switch (Application.platform) {
case RuntimePlatform.OSXEditor: //<path to project folder>/Assets
case RuntimePlatform.WindowsEditor:
if(currentDirectory.EndsWith("Assets/")) {
currentDirectory = currentDirectory.Substring(0, currentDirectory.LastIndexOf( "Assets/" ) );
currentDirectory += "RuntimeData/";
hasFoundMatch = true;
}
break;
case RuntimePlatform.WindowsPlayer: //<path to executablename_Data folder>
break;
case RuntimePlatform.OSXPlayer: //<path to player app bundle>/Contents
if(currentDirectory.EndsWith(".app/Contents/")) {
currentDirectory = currentDirectory.Substring(0, currentDirectory.LastIndexOf( ".app/Contents/" ) );
currentDirectory += "RuntimeData/";
hasFoundMatch = true;
}
break;
case RuntimePlatform.OSXDashboardPlayer: //<path to the dashboard widget bundle>
case RuntimePlatform.WindowsWebPlayer: //not supported
case RuntimePlatform.OSXWebPlayer:
default:
hasFoundMatch = false;
break;
}
if (!hasFoundMatch) {
currentDirectory = Path.GetFullPath("RuntimeData/");
currentDirectory = currentDirectory.Replace(@"\", "/");
}
if (!Directory.Exists( currentDirectory)) {
for (int i = 0; i < 3; i++)
currentDirectory = currentDirectory.Substring( 0, currentDirectory.LastIndexOf( "/" ) );
currentDirectory += "/RuntimeData/";
}
currentBaseDirectory = currentDirectory.Replace("/RuntimeData", "");
}
}
这允许我在Assets旁边有一个RuntimeData目录,我可以把保存文件放在里面。然后这个文件夹在发布后附带可执行文件(尽管你可能需要一个干净的副本,不需要任何开发测试保存;) )。