前幾天有個朋友問我為什么在IOS平臺中可以正常的讀寫文件可是在Android平臺中就無法正常的讀寫。當時因為在上班所以我沒時間來幫他解決,晚上回家后我就拿起安卓手機真機調試很快就定位問題所在,原來是他文件的路徑寫錯了。開發(fā)中往往一道很難的問題解開的時候發(fā)現原來真的非常的簡單,哇咔咔。 剛好在MOMO的書中也有涉及到文件的讀取與寫入,那么本節(jié)我將書中的部分內容搬到博客中為大家講解一下。廢話我就不多說了咱直奔主題,創(chuàng)建Text.cs腳本,直接掛在攝像機中。代碼中包括:創(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次數據 |
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+"http://"+ name); |
039 |
//如果此文件不存在則創(chuàng)建 |
059 |
ArrayList LoadFile(string path,string name) |
062 |
StreamReader sr =null; |
064 |
sr = File.OpenText(path+"http://"+ name); |
071 |
ArrayList arrlist = new ArrayList(); |
072 |
while ((line = sr.ReadLine()) != null) |
091 |
void DeleteFile(string path,string name) |
093 |
File.Delete(path+"http://"+ name); |
102 |
foreach(string str in infoall) |
105 |
GUILayout.Label(str); |
代碼中頭文件需要注意一下,涉及到IO讀取文件。創(chuàng)建文件、刪除文件、讀取文件的方法我也已經封裝好,Start方法中為了避免上次保存文件的殘留首先刪除原來的文件,然后創(chuàng)建文件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默認字體中找到,所以無法顯示。而默認字體只有字母和數字、字符。我們?yōu)榱嗽谝苿悠脚_中正常的顯示中文,需要自制中文字體包。下面我們開始制作一個簡單的字體包,mac機的話大家可以在 資源庫 -》 fonts中 找一個.ttf的字體,或者在網絡中下載一個.ttf字體。MOMO比較喜歡微軟雅黑字體,大家如果也喜歡微軟雅黑可以在后面下載這個工程的源碼,嘿嘿。如下圖所示, Project視圖中的”yh”就是MOMO在網絡中下載的微軟雅黑字體。
FontSize:字體的大小,這里我設置呈50,為了讓大家在IPAD中能看的更清楚。
FontColor:字體顏色。
Character:這里選擇Custom set,因為這里需要配置我們需要的字體。
CustomChars:這里輸入需要制作的字體。Unity默認的字體包含數字符號字母,為了讓移動設備支持中文,這里我輸入”宣雨松”它將生成一個包含“宣雨松”的材質與貼圖,也就是說將我們需要在移動設備中顯示的任何字符串在這里配置一下就OK啦。
最后點擊又小角的Apply按鈕即可完成字體配置。

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

|