2013年9月16日 星期一

Unity3D研究院之在MAC OS下解析Excel表格(五十二)

http://www.xuanyusong.com/archives/2192

今天研究了一下Unity中解析Excel表格的操作。如果你是Windows下那么直接看这篇文章吧。
http://forum.unity3d.com/threads/57967-How-can-I-get-data-from-excel
这是一个老外写的,还有例子的下载地址。它基于ODBC来解析Excel表格,可是ODBC在MAC OS上是不支持的,为了在Mac OS 中也能解析Excel ,我想到了CSV。
Ok我来写一个简单的Excel表格,然后将它保存为csv格式。
屏幕快照 2013-04-10 下午5.44.38

csv会以逗号的间隔形式将数据分开。为了在Unity中使用,我们还需要修改一下它的文件格式为.txt。为了能显示中文还得修改一下文本的编码格式为UTF-8 或者 UTF-16 。在Mac上直接用Unitron  来修改编码格式吧。

屏幕快照 2013-04-10 下午5.52.03

好吧,下面我们来测试读取吧。 在Hierarchy视图中创建一个GUI Text对象,然后创建一条脚本给他挂上。

using UnityEngine;
using System.Collections;

public class NewBehaviourScript : MonoBehaviour 
{
	void Start () 
	{
		TextAsset binAsset = Resources.Load("csv", typeof(TextAsset)) as TextAsset;		
		guiText.text = binAsset.text;
	}

}

为了方便使用我把csv.txt放在了Resources文件夹下面,如果没有你需要创建一个。 TextAsset 就可以来读取二进制文件了,然后直接将读取的内容显示出来。

屏幕快照 2013-04-10 下午6.00.20

csv将文本内容以分号的形式隔开。 其实我们可以将每个表组成一个二维数组,这样操作起来就非常方便。这时候我们需要安行类区分csv二进制的内容。 这里需要记住的是mac下换行符是”/r” 而windows下的换行符是”/n”
using UnityEngine;
using System.Collections;

public class NewBehaviourScript : MonoBehaviour
{
	void Start ()
	{
		//读取csv二进制文件
		TextAsset binAsset = Resources.Load ("csv", typeof(TextAsset)) as TextAsset;		
		//显示在GUITexture中
		guiText.text = binAsset.text;

		//读取每一行的内容
		string [] lineArray = binAsset.text.Split ("\r"[0]);

 		//创建二维数组
		string [][]Array = new string [lineArray.Length][];

		//把csv中的数据储存在二位数组中
		for(int i =0;i < lineArray.Length; i++)
		{
 			Array[i] = lineArray[i].Split (";" [0]);
		}

		//通过索引即可得到数据内容
		Debug.Log(Array[2][1]);
	}

}

如果你在程序中需要动态的读取这些数据,建议你在初始化中将csv的所有数据保存在一个全局的二维数组中。常驻内存中,当使用的时候只要调用这个二维数组即可。
在PC iOS android 平台下已经测过没有问题 最后是本文的下载地址:http://vdisk.weibo.com/s/x49QE
欢迎大家一起讨论学习,欢迎大家给我留言!加油,哇咔咔!!