乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

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

       3dC 2014-02-16

      前幾天有個朋友問我為什么在IOS平臺中可以正常的讀寫文件可是在Android平臺中就無法正常的讀寫。當時因為在上班所以我沒時間來幫他解決,晚上回家后我就拿起安卓手機真機調試很快就定位問題所在,原來是他文件的路徑寫錯了。開發(fā)中往往一道很難的問題解開的時候發(fā)現原來真的非常的簡單,哇咔咔。 剛好在MOMO的書中也有涉及到文件的讀取與寫入,那么本節(jié)我將書中的部分內容搬到博客中為大家講解一下。廢話我就不多說了咱直奔主題,創(chuàng)建Text.cs腳本,直接掛在攝像機中。代碼中包括:創(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     //文本中每行的內容
      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次數據
      019         CreateFile(Application.persistentDataPath,"FileName.txt","宣雨松MOMO");
      020         CreateFile(Application.persistentDataPath,"FileName.txt","宣雨松MOMO");
      021         CreateFile(Application.persistentDataPath ,"FileName.txt","宣雨松MOMO");
      022         //得到文本中每一行的內容
      023         infoall = LoadFile(Application.persistentDataPath,"FileName.txt");
      024  
      025     }
      026  
      027    /**
      028    * path:文件創(chuàng)建目錄
      029    * name:文件的名稱
      030    *  info:寫入的內容
      031    */
      032    void CreateFile(string path,string name,string info)
      033    {
      034       //文件流信息
      035       StreamWriter sw;
      036       FileInfo t = new FileInfo(path+"http://"+ name);
      037       if(!t.Exists)
      038       {
      039         //如果此文件不存在則創(chuàng)建
      040         sw = t.CreateText();
      041       }
      042       else
      043       {
      044         //如果此文件存在則打開
      045         sw = t.AppendText();
      046       }
      047       //以行的形式寫入信息
      048       sw.WriteLine(info);
      049       //關閉流
      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+"http://"+ 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             //將每一行的內容存入數組鏈表容器中
      076             arrlist.Add(line);
      077         }
      078         //關閉流
      079         sr.Close();
      080         //銷毀流
      081         sr.Dispose();
      082         //將數組鏈表容器返回
      083         return arrlist;
      084    }  
      085  
      086   /**
      087    * path:刪除文件的路徑
      088    * name:刪除文件的名稱
      089    */
      090  
      091    void DeleteFile(string path,string name)
      092    {
      093         File.Delete(path+"http://"+ name);
      094  
      095    }
      096  
      097    void OnGUI()
      098    {
      099         //用新的皮膚資源,顯示中文
      100         GUI.skin = skin;
      101         //讀取文件中的所有內容
      102         foreach(string str in infoall)
      103         {
      104             //繪制在屏幕當中,哇咔咔!
      105             GUILayout.Label(str);
      106         }
      107  
      108    }
      109  
      110 }

      代碼中頭文件需要注意一下,涉及到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  他已經寫得很清楚啦。

        本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯系方式、誘導購買等信息,謹防詐騙。如發(fā)現有害或侵權內容,請點擊一鍵舉報。
        轉藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多