<h2><pre name="code" class="csharp"><span style="font-family: Arial, Helvetica, sans-serif; font-size: 12px;">Excel_Base基类</span>
using UnityEngine;
using System.Collections;
public abstract class Excel_Base<T> where T : class , new()
{
private static T mInstance;
public static T Instance
{
get
{
if (mInstance == null)
{
mInstance = new T();
}
return mInstance;
}
}
private char[] SplitCharacters = { '\n', '\r', '\t', '=' };
protected string[] ReadExcelRow(string excelRow)
{
string[] results = excelRow.Split(SplitCharacters, System.StringSplitOptions.RemoveEmptyEntries);
return results;
}
protected string[] ReadExcelLine(string fileTxt)
{
string[] results = fileTxt.Split(new char[] { '\n', '\r' }, System.StringSplitOptions.RemoveEmptyEntries);
return results;
}
public abstract void LoadData(string fileTxt);
}
数据类WeaponItem
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
/// <summary>
/// 武器
/// </summary>
[Serializable]
public class WeaponItem
{
public WeaponItem(int id)
{
_id = id;
}
public int _id;
public string remark;//备注
public WeaponType type;//武器类型
public int level;//等级
public int nextLevel;//下一等级
public string bullet;//子弹
public string effect;//开火特效
public string launcher;//发射器
public string crossHair;//准心
public string fireSound;//开火声音
public float hurtRate;//伤害频率
public int hurt;//伤害
public int continuedTime;//激光:持续时间;导弹:发射间隔
public int missileCount;//导弹数量
public float attackDis;//攻击距离
public float x;//颤屏x
public float y;//颤屏y
public float z;//颤屏z
public int speed;//颤屏速度
public float shakeRate;//颤屏频率
public string gradeSound;//升级音效
public string attackEffect;//击中特效
public string attackSound;//击中音效
}
读取数据
public class Excel_Weapon : Excel_Base<Excel_Weapon>
{
public override void LoadData(string fileText)
{
string[] results = ReadExcelLine(fileText);
int nLen = results.Length;
for (int i = 1; i < nLen; i++)
{
string[] datas = ReadExcelRow(results[i]);
if (datas.Length == 0)
{
continue;
}
int start = 0;
int iContentID = Convert.ToInt32(datas[start]);
if (iContentID == -1)
{
continue;
}
WeaponItem item = new WeaponItem(iContentID);
start++;
item.remark = datas[start].ToString();
start++;
item.type = (WeaponType)Convert.ToInt32(datas[start].ToString());
start++;
item.level = Convert.ToInt32(datas[start].ToString());
start++;
item.nextLevel = Convert.ToInt32(datas[start].ToString());
start++;
item.bullet = datas[start].ToString();
start++;
item.effect = datas[start].ToString();
start++;
item.launcher = datas[start].ToString();
start++;
item.crossHair = datas[start].ToString();
start++;
item.fireSound = datas[start].ToString();
start++;
item.hurtRate = Convert.ToSingle(datas[start].ToString());
start++;
item.hurt = Convert.ToInt32(datas[start].ToString());
start++;
item.continuedTime = Convert.ToInt32(datas[start].ToString());
start++;
item.missileCount = Convert.ToInt32(datas[start].ToString());
start++;
item.attackDis = Convert.ToSingle(datas[start].ToString());
start++;
item.x = Convert.ToSingle(datas[start].ToString());
start++;
item.y = Convert.ToSingle(datas[start].ToString());
start++;
item.z = Convert.ToSingle(datas[start].ToString());
start++;
item.speed = Convert.ToInt32(datas[start].ToString());
start++;
item.shakeRate = Convert.ToSingle(datas[start].ToString());
start++;
item.gradeSound = datas[start].ToString();
start++;
item.attackEffect = datas[start].ToString();
start++;
item.attackSound = datas[start].ToString();
//Debug.Log("item._id:" + item._id + "bullet:" + item.bullet + " item.missileCount:" + item.missileCount + " item.continuedTime:" + item.continuedTime);
GlobalConfig._WeaponData.AddItem(item);
}
}
}
只要在合适的时机调用LoadData()方法即可