前几天有个朋友问我为什么在IOS平台中可以正常的读写文件可是在Android平台中就无法正常的读写。当时因为在上班所以我没时间来帮他解决,晚上回家后我就拿起安卓手机真机调试很快就定位问题所在,原来是他文件的路径写错了。开发中往往一道很难的问题解开的时候发现原来真的非常的简单,哇咔咔。 刚好在MOMO的书中也有涉及到文件的读取与写入,那么本节我将书中的部分内容搬到博客中为大家讲解一下。废话我就不多说了咱直奔主题,创建Text.cs脚本,直接挂在摄像机中。代码中包括:创建文件、读取文件、删除文件。
Text.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
|
usingUnityEngine;
usingSystem.Collections;
usingSystem.IO;
usingSystem.Collections.Generic;
usingSystem;
publicclass Text:MonoBehaviour{
//文本中每行的内容
ArrayList infoall;
//皮肤资源,这里用于显示中文
public GUISkin skin;
void Start()
{
//删除文件
DeleteFile(Application.persistentDataPath,"FileName.txt");
//创建文件,共写入3次数据
CreateFile(Application.persistentDataPath,"FileName.txt","宣雨松MOMO");
CreateFile(Application.persistentDataPath,"FileName.txt","宣雨松MOMO");
CreateFile(Application.persistentDataPath,"FileName.txt","宣雨松MOMO");
//得到文本中每一行的内容
infoall=LoadFile(Application.persistentDataPath,"FileName.txt");
}
/**
* path:文件创建目录
* name:文件的名称
* info:写入的内容
*/
void CreateFile(string path,string name,string info)
{
//文件流信息
StreamWriter sw;
FileInfot=new FileInfo(path+"//"+name);
if(!t.Exists)
{
//如果此文件不存在则创建
sw=t.CreateText();
}
else
{
//如果此文件存在则打开
sw=t.AppendText();
}
//以行的形式写入信息
sw.WriteLine(info);
//关闭流
sw.Close();
//销毁流
sw.Dispose();
}
/**
* path:读取文件的路径
* name:读取文件的名称
*/
ArrayList LoadFile(string path,string name)
{
//使用流的形式读取
StreamReader sr=null;
try{
sr=File.OpenText(path+"//"+name);
}catch(Exceptione)
{
//路径与名称未找到文件则直接返回空
returnnull;
}
string line;
ArrayList arrlist=new ArrayList();
while((line=sr.ReadLine())!=null)
{
//一行一行的读取
//将每一行的内容存入数组链表容器中
arrlist.Add(line);
}
//关闭流
sr.Close();
//销毁流
sr.Dispose();
//将数组链表容器返回
returnarrlist;
}
/**
* path:删除文件的路径
* name:删除文件的名称
*/
void DeleteFile(string path,string name)
{
File.Delete(path+"//"+name);
}
void OnGUI()
{
//用新的皮肤资源,显示中文
GUI.skin=skin;
//读取文件中的所有内容
foreach(stringstr ininfoall)
{
//绘制在屏幕当中,哇咔咔!
GUILayout.Label(str);
}
}
}
|
代码中头文件需要注意一下,涉及到IO读取文件。创建文件、删除文件、读取文件的方法我也已经封装好,Start方法中为了避免上次保存文件的残留首先删除原来的文件,然后创建文件FileName.txt ,我们也可修改文件的类型的后缀名。这里我写的是.txt ,为了完整的让中文出现在IOS与Android中所以这里给文件中写的数据是”宣雨松MOMO”,最后在OnGUI中将读取文件的文本信息显示在屏幕中,脚本保存格式为UTF-16。
代码中我们保存文件的路径是Application.persistentDataPath。 如果你写的路径是 Application.dataPath在编辑器中是可以正常读取,但是在IOS与Android中是无法读取的,昨天问我的那个朋友就是因为这里路径写的有问题没能成功的写入文件。 Application.persistentDataPath路径就是将文件保存在手机的沙盒中,如果在编辑器中运行本程序文件将保存在Finder-》 资源库-》Caches-》你的工程-》保存的文件 。本例的路径就是 Finder->资源库-> Caches -> txt->FileName.txt。
OK 截至到这里,运行游戏后在编辑器中是可以正常的看到“宣雨松MOMO”出现在Game视图中,但是如果你编译在IOS或者Android上将只显示”MOMO”,原因很简单”宣雨松”三个字无法在Unity默认字体中找到,所以无法显示。而默认字体只有字母和数字、字符。我们为了在移动平台中正常的显示中文,需要自制中文字体包。下面我们开始制作一个简单的字体包,mac机的话大家可以在 资源库 -》 fonts中 找一个.ttf的字体,或者在网络中下载一个.ttf字体。MOMO比较喜欢微软雅黑字体,大家如果也喜欢微软雅黑可以在后面下载这个工程的源码,嘿嘿。如下图所示, Project视图中的”yh”就是MOMO在网络中下载的微软雅黑字体。
FontSize:字体的大小,这里我设置呈50,为了让大家在IPAD中能看的更清楚。
FontColor:字体颜色。
Character:这里选择Custom set,因为这里需要配置我们需要的字体。
CustomChars:这里输入需要制作的字体。Unity默认的字体包含数字符号字母,为了让移动设备支持中文,这里我输入”宣雨松”它将生成一个包含“宣雨松”的材质与贴图,也就是说将我们需要在移动设备中显示的任何字符串在这里配置一下就OK啦。
最后点击又小角的Apply按钮即可完成字体配置。
将字符赋值给创建的皮肤文件然后应用在程序当中即可,如下图所示这是IPAD中截图的效果,大家应该会问上面代码中明明写入的是”宣雨松MOMO”为什么这里没能显示MOMO呢?蛤蛤 原因很简单,上图中在Custom Chars中我们只配置了 “宣雨松” 所以这里就只能显示”宣雨松”无法显示MOMO啦。。大家可根据自己需要显示的字符串添加进去即可。在程序中我们可能会写入很多的中文,但是同样的文字又没必要重复出现,那么如何来制作这个字体包呢?制作的细节大家可以参照威哥的博客:http://1vr.cn/article.asp?id=607 他已经写得很清楚啦。
最后本文的程序MOMO已经打成包,雨松MOMO希望和大家一起学习,一起进步加油哇咔咔,拉拉~~
下载地址:http://vdisk.weibo.com/s/ab_aA
补充:假设你的程序中已经预先将2进制文件做好,如下图所示,你需要把二进制文件放在StreamingAssets这个文件夹中,一定要放在这里。
举个例子,放在StreamingAssets中二进制文件打包后,Unity会将这些二进制文件放置在对应平台下的路径下。所以根据不同平台,访问的路径是不一样的。切记,你的二进制文件一定要放在StreamingAssets !!!!!!
|
#if UNITY_EDITOR
string filepath=Application.dataPath+"/StreamingAssets"+"/my.xml";
#elif UNITY_IPHONE
string filepath=Application.dataPath+"/Raw"+"/my.xml";
#elif UNITY_ANDROID
string filepath="jar:file://"+Application.dataPath+"!/assets/"+"/my.xml;
#endif
|
分享到:
相关推荐
运行环境android studio 完整源代码,可以读取nfc卡序列号,写入卡信息源代码例子,进对例子进行扩展,下载回来后,电脑接上手机,运行在手机上,准备NFC卡(MifareUltralight格式)即可测试 具体操作方式见我博文,...
python读取Android apk 包名,权限,以及读取 ios IPA bid,权限. 上传文件,将权限写入excel 表格,有能力的大佬可以再优化,做成反编译工具,或者我自己有时间了再自己优化添加一些功能。
// #ifdef APP-VUE var AfDocument = uni.requireNativePlugin('Aq-ChooseFile'); AfDocument.openMode( { size: '1', //选择总数量 isDown: true, types: [ { ...
Flutter NFC Reader&Writer一个新的flutter插件,可以帮助希望使用iOS或Android设备内部的内部硬件进行读取和写入的Flutter NFC Reader&Writer一个新的flutter插件可以帮助开发者希望使用iOS或Android设备内部的...
读取符合以下条件的标签/卡的元数据并读写NDEF记录: ISO 14443 A型和B型(NFC-A / NFC-B / MIFARE Classic / MIFARE Plus / MIFARE Ultralight / MIFARE DESFire) ISO 18092(NFC-F / FeliCa) ISO 15963(NFC...
从xx.json文件中读取JSON数据,写入到xx.plist文件中,实现代码如下: NSString *path = @/Users/android_ls/Desktop/city_province.json; NSArray *array = [NSJSONSerialization JSONObjectWithData:[NSData ...
Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...
该插件实现了对Android,iOS和Windows 8.1的BLE支持(部分支持)。 使您的Cordova和PhoneGap移动应用程序能够与各种BLE设备进行通信。 可用功能: 扫描BLE设备(iOS和Android支持后台扫描) 建立联系 列出服务,...
本机插件可读取NFC标签。 要将插件安装在您的项目中,请运行: npm install --save capacitor-nfc@latest 支持平台 安卓 的iOS (对不起,我没有,也没有计划购买iPhone。欢迎您为iOS捐款。) Android笔记 此API...
在多线程开发中一般使用在多个读单个写入的场景,比如将摄像头的画面读取后显示并同时编码推流。c语言做跨平台开发,实现一个共享锁封装对象还是有用的。 本资源在Windows、Linux、Android、IOS都可以使用。 ...
该插件实现了对Android,iOS和Windows 8.1的BLE支持(部分支持)。 使您的Cordova和PhoneGap移动应用程序能够与各种BLE设备进行通信。 可用功能: 扫描BLE设备(iOS和Android上支持后台扫描) 建立联系 列出服务...
DiskLRUCache 是一个只实现了同步读取写入的库,因此豆芽对其进行了包装,提供了异步读写的 API,正确实现,提高了应用的响应速度。 状态同步 由于各个界面独自获取数据,数据本身与常规的 ContentProvider 机制中...
本生现在具有基本的DatArchive支持,使您可以创建,读取,获取信息以及将文件写入DatArchive。 共享这些数据仍然在进行中。 如何使用本生 本生目前是非常具有alpha品质的软件。 它可以在运行ARMv7a和x86处理器的移动...
声明:该设计资料来源于DF创客社区,仅供学习参考,不可用于商业用途。 硬件组成: ...我们使用了LeanCloud作为远端服务器,iOS中也包含了相关的支持库。如果有需要的话,请大家更改成自己的api key哦!
支持分享文本,图片,视频和文件安装dependencies: share_extend: "^1.1.9"的iOS添加下面的键到工程的info.plist文件,路径<project>/ios/Runner/Info.plist ,用于将分享的图片保存到相册<key>...
代码来将每个标签的注释写入单独的文件。 然后我可以手动将我感兴趣的标签导入 Infoselect 或其他应用程序。 可以修改这些功能并添加代码以将它们导出以将它们直接导入到您喜欢的应用程序中。 Infoselect 的导入能力...
Java数据压缩与传输实例 1个目标文件 摘要:Java源码,文件操作,数据压缩,文件传输 Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、...
ReportAndroid.json ReportiOS.json 订阅Android.json 订阅iOS.JSON 退订iOS.json fme 包含2个支持移动应用程序FME Reporter和FME Alerts的工作区。 这些文件包含读取器,写入器和FMEServerNotifier,需要对其进行...
使用ImageMagick的®创建,编辑,撰写,或转换位图图像。它可以读取和写入各种格式(超过200种)的图像,包括PNG,JPEG,GIF,HEIC,TIFF,DPX,...它可以在Linux,Windows,Mac Os X,iOS,Android OS等平台上运行。