前幾天有個(gè)朋友問(wèn)我為什么在IOS平臺(tái)中可以正常的讀寫文件可是在Android平臺(tái)中就無(wú)法正常的讀寫。當(dāng)時(shí)因?yàn)樵谏习嗨晕覜](méi)時(shí)間來(lái)幫他解決,晚上回家后我就拿起安卓手機(jī)真機(jī)調(diào)試很快就定位問(wèn)題所在,原來(lái)是他文件的路徑寫錯(cuò)了。開(kāi)發(fā)中往往一道很難的問(wèn)題解開(kāi)的時(shí)候發(fā)現(xiàn)原來(lái)真的非常的簡(jiǎn)單,哇咔咔。 剛好在MOMO的書中也有涉及到文件的讀取與寫入,那么本節(jié)我將書中的部分內(nèi)容搬到博客中為大家講解一下。廢話我就不多說(shuō)了咱直奔主題,創(chuàng)建Text.cs腳本,直接掛在攝像機(jī)中。代碼中包括:創(chuàng)建文件、讀取文件、刪除文件。
Text.cs
[代碼]c#/cpp/oc代碼:
002 |
using System.Collections; |
004 |
using System.Collections.Generic; |
007 |
public class Text : MonoBehaviour { |
016 |
DeleteFile(Application.persistentDataPath,"FileName.txt"); |
018 |
//創(chuàng)建文件,共寫入3次數(shù)據(jù) |
019 |
CreateFile(Application.persistentDataPath,"FileName.txt","宣雨松MOMO"); |
020 |
CreateFile(Application.persistentDataPath,"FileName.txt","宣雨松MOMO"); |
021 |
CreateFile(Application.persistentDataPath ,"FileName.txt","宣雨松MOMO"); |
023 |
infoall = LoadFile(Application.persistentDataPath,"FileName.txt"); |
028 |
* path:文件創(chuàng)建目錄 |
032 |
void CreateFile(string path,string name,string info) |
036 |
FileInfo t = new FileInfo(path+"//"+ name); |
039 |
//如果此文件不存在則創(chuàng)建 |
059 |
ArrayList LoadFile(string path,string name) |
062 |
StreamReader sr =null; |
064 |
sr = File.OpenText(path+"//"+ name); |
071 |
ArrayList arrlist = new ArrayList(); |
072 |
while ((line = sr.ReadLine()) != null) |
075 |
//將每一行的內(nèi)容存入數(shù)組鏈表容器中 |
091 |
void DeleteFile(string path,string name) |
093 |
File.Delete(path+"//"+ name); |
102 |
foreach(string str in infoall) |
105 |
GUILayout.Label(str); |
代碼中頭文件需要注意一下,涉及到IO讀取文件。創(chuàng)建文件、刪除文件、讀取文件的方法我也已經(jīng)封裝好,Start方法中為了避免上次保存文件的殘留首先刪除原來(lái)的文件,然后創(chuàng)建文件FileName.txt ,我們也可修改文件的類型的后綴名。這里我寫的是.txt ,為了完整的讓中文出現(xiàn)在IOS與Android中所以這里給文件中寫的數(shù)據(jù)是”宣雨松MOMO”,最后在OnGUI中將讀取文件的文本信息顯示在屏幕中,腳本保存格式為UTF-16。
代碼中我們保存文件的路徑是Application.persistentDataPath。 如果你寫的路徑是 Application.dataPath在編輯器中是可以正常讀取,但是在IOS與Android中是無(wú)法讀取的,昨天問(wèn)我的那個(gè)朋友就是因?yàn)檫@里路徑寫的有問(wèn)題沒(méi)能成功的寫入文件。 Application.persistentDataPath路徑就是將文件保存在手機(jī)的沙盒中,如果在編輯器中運(yùn)行本程序文件將保存在Finder-》 資源庫(kù)-》Caches-》你的工程-》保存的文件 。本例的路徑就是 Finder->資源庫(kù)-> Caches -> txt->FileName.txt。
OK 截至到這里,運(yùn)行游戲后在編輯器中是可以正常的看到“宣雨松MOMO”出現(xiàn)在Game視圖中,但是如果你編譯在IOS或者Android上將只顯示”MOMO”,原因很簡(jiǎn)單”宣雨松”三個(gè)字無(wú)法在Unity默認(rèn)字體中找到,所以無(wú)法顯示。而默認(rèn)字體只有字母和數(shù)字、字符。我們?yōu)榱嗽谝苿?dòng)平臺(tái)中正常的顯示中文,需要自制中文字體包。下面我們開(kāi)始制作一個(gè)簡(jiǎn)單的字體包,mac機(jī)的話大家可以在 資源庫(kù) -》 fonts中 找一個(gè).ttf的字體,或者在網(wǎng)絡(luò)中下載一個(gè).ttf字體。MOMO比較喜歡微軟雅黑字體,大家如果也喜歡微軟雅黑可以在后面下載這個(gè)工程的源碼,嘿嘿。如下圖所示, Project視圖中的”yh”就是MOMO在網(wǎng)絡(luò)中下載的微軟雅黑字體。
FontSize:字體的大小,這里我設(shè)置呈50,為了讓大家在IPAD中能看的更清楚。
FontColor:字體顏色。
Character:這里選擇Custom set,因?yàn)檫@里需要配置我們需要的字體。
CustomChars:這里輸入需要制作的字體。Unity默認(rèn)的字體包含數(shù)字符號(hào)字母,為了讓移動(dòng)設(shè)備支持中文,這里我輸入”宣雨松”它將生成一個(gè)包含“宣雨松”的材質(zhì)與貼圖,也就是說(shuō)將我們需要在移動(dòng)設(shè)備中顯示的任何字符串在這里配置一下就OK啦。
最后點(diǎn)擊又小角的Apply按鈕即可完成字體配置。

將字符賦值給創(chuàng)建的皮膚文件然后應(yīng)用在程序當(dāng)中即可,如下圖所示這是IPAD中截圖的效果,大家應(yīng)該會(huì)問(wèn)上面代碼中明明寫入的是”宣雨松MOMO”為什么這里沒(méi)能顯示MOMO呢?蛤蛤 原因很簡(jiǎn)單,上圖中在Custom Chars中我們只配置了 “宣雨松” 所以這里就只能顯示”宣雨松”無(wú)法顯示MOMO啦。。大家可根據(jù)自己需要顯示的字符串添加進(jìn)去即可。在程序中我們可能會(huì)寫入很多的中文,但是同樣的文字又沒(méi)必要重復(fù)出現(xiàn),那么如何來(lái)制作這個(gè)字體包呢?制作的細(xì)節(jié)大家可以參照威哥的博客:http://1vr.cn/article.asp?id=607 他已經(jīng)寫得很清楚啦。

代碼下載:http://115.com/file/e7ieutvl#Font.unitypackage