自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Unity3D研究之支持中文與本地文件的讀取寫入

移動(dòng)開(kāi)發(fā) iOS 游戲開(kāi)發(fā)
前幾天有個(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代碼:

001 using UnityEngine;
002 using System.Collections;
003 using System.IO;
004 using System.Collections.Generic;
005 using System;
006  
007 public class Text : MonoBehaviour {
008     //文本中每行的內(nèi)容
009     ArrayList infoall;
010     //皮膚資源,這里用于顯示中文
011     public GUISkin skin;
012     void Start ()
013     {
014  
015         //刪除文件
016         DeleteFile(Application.persistentDataPath,"FileName.txt");
017  
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");
022         //得到文本中每一行的內(nèi)容
023         infoall = LoadFile(Application.persistentDataPath,"FileName.txt");
024  
025     }
026  
027    /**
028    * path:文件創(chuàng)建目錄
029    * name:文件的名稱
030    *  info:寫入的內(nèi)容
031    */
032    void CreateFile(string path,string name,string info)
033    {
034       //文件流信息
035       StreamWriter sw;
036       FileInfo t = new FileInfo(path+"//"+ name);
037       if(!t.Exists)
038       {
039         //如果此文件不存在則創(chuàng)建
040         sw = t.CreateText();
041       }
042       else
043       {
044         //如果此文件存在則打開(kāi)
045         sw = t.AppendText();
046       }
047       //以行的形式寫入信息
048       sw.WriteLine(info);
049       //關(guān)閉流
050       sw.Close();
051       //銷毀流
052       sw.Dispose();
053    } 
054  
055   /**
056    * path:讀取文件的路徑
057    * name:讀取文件的名稱
058    */
059    ArrayList LoadFile(string path,string name)
060    {
061         //使用流的形式讀取
062         StreamReader sr =null;
063         try{
064             sr = File.OpenText(path+"//"+ name);
065         }catch(Exception e)
066         {
067             //路徑與名稱未找到文件則直接返回空
068             return null;
069         }
070         string line;
071         ArrayList arrlist = new ArrayList();
072         while ((line = sr.ReadLine()) != null)
073         {
074             //一行一行的讀取
075             //將每一行的內(nèi)容存入數(shù)組鏈表容器中
076             arrlist.Add(line);
077         }
078         //關(guān)閉流
079         sr.Close();
080         //銷毀流
081         sr.Dispose();
082         //將數(shù)組鏈表容器返回
083         return arrlist;
084    }  
085  
086   /**
087    * path:刪除文件的路徑
088    * name:刪除文件的名稱
089    */
090  
091    void DeleteFile(string path,string name)
092    {
093         File.Delete(path+"//"+ name);
094  
095    }
096  
097    void OnGUI()
098    {
099         //用新的皮膚資源,顯示中文
100         GUI.skin = skin;
101         //讀取文件中的所有內(nèi)容
102         foreach(string str in infoall)
103         {
104             //繪制在屏幕當(dāng)中,哇咔咔!
105             GUILayout.Label(str);
106         }
107  
108    }
109  
110 }

代碼中頭文件需要注意一下,涉及到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

責(zé)任編輯:冰凝兒
相關(guān)推薦

2012-12-24 09:20:48

AndoidUnity3D

2012-12-24 09:09:27

AndoidUnity3D

2012-12-24 09:13:23

iOSUnity3D

2012-12-24 09:15:57

iOSUnity3D

2012-12-24 09:11:58

iOSUnity3D

2012-12-24 09:08:14

iOSUnity3D

2012-12-24 09:14:31

ios

2013-04-25 09:56:24

unity3D手機(jī)游戲引擎

2012-12-24 08:48:25

iOSUnity3D

2012-12-24 09:17:12

iOSUnity3D

2013-04-25 10:03:07

unity3D手機(jī)游戲引擎

2012-12-24 09:55:15

iOSUnity3D

2013-04-25 13:27:11

unity3D手機(jī)游戲引擎

2012-12-24 08:51:23

iOSUnity3D

2012-12-24 09:18:22

iOSUnity3D

2012-12-24 08:52:44

iOSUnity3D

2012-12-24 08:40:12

2012-12-24 08:46:50

iOSUnity3D

2013-06-19 08:52:48

Unity3D

2013-04-25 09:08:39

unity3D手機(jī)游戲引擎
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)