Unity3D IOS Android支持中文与本地文件的读取写入

         前几天有个朋友问我为什么在IOS平台中可以正常的读写文件可是在Android平台中就无法正常的读写。当时因为在上班所以我没时间来帮他解决,晚上回家后我就拿起安卓手机真机调试很快就定位问题所在,原来是他文件的路径写错了。开发中往往一道很难的问题解开的时候发现原来真的非常的简单,哇咔咔。  刚好在MOMO的书中也有涉及到文件的读取与写入,那么本节我将书中的部分内容搬到博客中为大家讲解一下。废话我就不多说了咱直奔主题,创建Text.cs脚本,直接挂在摄像机中。代码中包括:创建文件、读取文件、删除文件。

Text.cs

 

001using UnityEngine;
002using System.Collections;
003using System.IO;
004using System.Collections.Generic;
005using System;
006  
007public 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        //创建文件,共写入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:文件创建目录
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+"//"+ name);
037      if(!t.Exists)
038      {
039        //如果此文件不存在则创建
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+"//"+ 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+"//"+ 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读取文件。创建文件、删除文件、读取文件的方法我也已经封装好,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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!针对您的问题,这里提供一些相关的信息供您参考。 首先,Unity是一款跨平台的游戏开发引擎,可以支持在多个平台上进行游戏开发。而AndroidiOS是其中比较常见的移动平台。 在AndroidiOS平台上嵌入Unity的开发示例,可以参考官方文档中的相关内容。具体步骤如下: 1. 创建Unity项目并设置相关参数,例如选择AndroidiOS平台,设置屏幕分辨率等。 2. 在Unity项目中添加所需的场景和游戏对象,并设置相应的脚本和材质等。 3. 将Unity项目导出为AndroidiOS平台所需的文件格式,例如APK或IPA文件。 4. 在AndroidiOS项目中嵌入Unity文件,并通过相关代码进行调用和交互。 需要注意的是,AndroidiOS平台上嵌入Unity的具体实现方式可能会有所不同,需要根据具体情况进行调整和修改。 另外,关于在Unity中开发AndroidiOS应用的示例,也可以参考官方文档中的相关内容。具体步骤如下: 1. 创建Unity项目并设置相关参数,例如选择AndroidiOS平台,设置屏幕分辨率等。 2. 在Unity项目中添加所需的场景和游戏对象,并设置相应的脚本和材质等。 3. 使用Unity提供的AndroidiOS插件进行开发,例如调用相机或GPS等硬件功能,或者进行网络通信等。 4. 将Unity项目导出为AndroidiOS应用程序,并进行相关的测试和调试。 需要注意的是,开发AndroidiOS应用程序需要遵循相应的规范和标准,例如Android应用程序需要满足Google Play的要求,iOS应用程序需要通过苹果的审核。因此,在开发过程中需要谨慎处理相关问题。 希望以上信息对您有所帮助,如有任何疑问,请随时提出。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值