Unity Android上配置文件的解决方法 一个由换行符引起的错误
2016-10-25 13:17
477 查看
版本:unity 5.3.4 语言:C#
本人这边参考了木头大的文章,不过因为我的需求是能直接用Android的文件编辑器直接改配置文件,而且是在非root的权限的前提下(因为麻烦嘛)。
所以我提出了在sdcard上保存配置文件的方法。当然如果你不是VR游戏的话,直接在游戏内弄个设置界面就OK了。
首先是一个宏,用来判断当前环境是编辑模式下、还是在Android环境下:
public static string CONFIG_PATH
#if UNITY_EDITOR
= Application.persistentDataPath + "/app.conf";
#elif UNITY_ANDROID
= "/sdcard/app.conf";
#endif
需要注意的是,如果你把Unity设置为Android项目,即使是在编辑器环境下,返回的也是真,所以在判断前一定要先判断UNITY_EDITR的真假。
用到了sdcard,项目必须想系统申请该权限,把配置的Write Access改为如下图(想要吐槽的是Android的权限系统形同虚设):
![](https://oscdn.geek-share.com/Uploads/Images/Content/202005/05/c49fb9604388f025ed20a9bfe968470a)
我们操控文件使用的类是FileStream,读取文件的话如下代码所示:
// 获取内容
FileStream fileStream = new FileStream(CONFIG_PATH + "/" + configName, FileMode.Open);
byte[] bytes = new byte[2048];
fileStream.Read(bytes, 0, bytes.Length);
// 读取内容
string context = Encoding.ASCII.GetString(bytes);
fileStream.Close();
接下来是保存字符串的代码:
FileStream fileStream = new FileStream(CONFIG_PATH + "/" + configName, FileMode.Create);
// 构造内容
string content = "xxxxxxxx";
Console.WriteLine("{0}", content);
ASCIIEncoding ascii = new ASCIIEncoding();
byte[] bytes = ascii.GetBytes(content);
// 保存
fileStream.Write(bytes, 0, bytes.Length);
fileStream.Close();
还是比较容易的吧,不过我在Android打包后出现了一些问题。先讲一下换行符,在Windows平台上换行符是由两个字符表示的\r\n,而在Android上使用则是\n。
我这边在Android上编辑的时候,遇到了每一个项配置后面有个空格的情况,当时没有太注意,后来一想那玩意就是\r。而我把它删除了,使用\r\n来分割每一个配置项自然就出错了。
总结:
Windows换行符:\r\n;Android:\r\n
本人这边参考了木头大的文章,不过因为我的需求是能直接用Android的文件编辑器直接改配置文件,而且是在非root的权限的前提下(因为麻烦嘛)。
所以我提出了在sdcard上保存配置文件的方法。当然如果你不是VR游戏的话,直接在游戏内弄个设置界面就OK了。
首先是一个宏,用来判断当前环境是编辑模式下、还是在Android环境下:
public static string CONFIG_PATH
#if UNITY_EDITOR
= Application.persistentDataPath + "/app.conf";
#elif UNITY_ANDROID
= "/sdcard/app.conf";
#endif
需要注意的是,如果你把Unity设置为Android项目,即使是在编辑器环境下,返回的也是真,所以在判断前一定要先判断UNITY_EDITR的真假。
用到了sdcard,项目必须想系统申请该权限,把配置的Write Access改为如下图(想要吐槽的是Android的权限系统形同虚设):
我们操控文件使用的类是FileStream,读取文件的话如下代码所示:
// 获取内容
FileStream fileStream = new FileStream(CONFIG_PATH + "/" + configName, FileMode.Open);
byte[] bytes = new byte[2048];
fileStream.Read(bytes, 0, bytes.Length);
// 读取内容
string context = Encoding.ASCII.GetString(bytes);
fileStream.Close();
接下来是保存字符串的代码:
FileStream fileStream = new FileStream(CONFIG_PATH + "/" + configName, FileMode.Create);
// 构造内容
string content = "xxxxxxxx";
Console.WriteLine("{0}", content);
ASCIIEncoding ascii = new ASCIIEncoding();
byte[] bytes = ascii.GetBytes(content);
// 保存
fileStream.Write(bytes, 0, bytes.Length);
fileStream.Close();
还是比较容易的吧,不过我在Android打包后出现了一些问题。先讲一下换行符,在Windows平台上换行符是由两个字符表示的\r\n,而在Android上使用则是\n。
我这边在Android上编辑的时候,遇到了每一个项配置后面有个空格的情况,当时没有太注意,后来一想那玩意就是\r。而我把它删除了,使用\r\n来分割每一个配置项自然就出错了。
总结:
Windows换行符:\r\n;Android:\r\n
相关文章推荐
- 读取xml文件出现错误的一个解决方法(android)
- eclipse中导入android ADT-20.0.3出现的一个错误及解决方法
- PhpMyAdmin 配置文件现在需要一个短语密码的解决方法PhpMyAdmin 配置文件现在需要一个短语密码的解决方法
- Eclipse中导入android项目名前有红叉但项目内文件无错误问题解决方法
- 只有在配置文件或 Page 指令中将 enableSessionState 设置为 true 时,才能使用会话状态等错误解决方法(原)
- 用iReport开发出一个jasper文件并嵌入到jsp中所遇到的错误以及解决方法
- 安装Office时出现windows installer服务不能更新一个或多个受保护的windows文件错误的解决方法
- android R文件无法生成错误解决方法
- phpMyAdmin配置文件现在需要一个短语密码解决方法
- Eclipse中导入android项目名前有红叉但项目内文件无错误问题解决方法
- phpMyAdmin配置文件现在需要一个短语密码解决方法
- 用VS2005在Release配置下编译出现清单文件的错误的解决方法
- Android编译CPU架构体系不同引起的错误解决方法
- Unity 3D 文件导入出错误解决方法以及unity圣典离线版下载地址
- 安装Office时出现windows installer服务不能更新一个或多个受保护的windows文件错误的解决方法
- 安装AJAX Documents 时候发生的web.config文件配置错误的解决方法
- 【android日常错误】Android R.java文件丢失,解决方法
- 对于android文件上传中 java.lang.NoClassDefFoundError: org/apache/commons/io/output/DeferredFileOutputStream 的错误解决方法
- Foxpro数据库连接错误解决方法--【VFP DBF文件不是一个有效的路径。 确定路径名称拼写是否正确,以及是否连接到文件存放的服务器】
- 【android日常错误】Android R.java文件丢失,解决方法