[Unity基础]解析excel以及动画切割
来源:互联网 发布:英雄美工铱金钢笔9018 编辑:程序博客网 时间:2024/06/07 06:00
参考链接:
http://www.xuanyusong.com/archives/2429
http://blog.csdn.net/asd237241291/article/details/11788831
http://www.manew.com/thread-44458-1-1.html
excel转json:
http://pan.baidu.com/s/1gdvzsQZ
使用:
1.导入“ExcelToJson.unitypackage”工具包
2.把所有Excel表文件转成.csv文件。
3.然后把所有.csv文件copy到工程的Assets\Data文件夹目录
4.点击"Game->ExcelToJson"
5.然后默认会在“Assets\Json\Data”目录下生成所有Excel表文件对应的Json格式的数据。
解析excel:
一般 Excel的格式分为两种,一种是 .xls 还有一种是.xlsx ,这里我们只说.xlsx 。
需要使用第三方开发包:ICSharpCode.SharpZipLib,下载地址:http://yun.baidu.com/s/1pJ61ZUN
using UnityEngine;using System.IO;using Excel;using System.Data;//要引用System.Data.dll//只能读取XLSX,且读取时XLSX文件要关闭//在表格删除内容时,不能按del键,因为这样会使字符串变为空字符串,能读取到DataSet中,//正确的删除方法是右键/删除public class ReadXLSX { public static string[,] Read(string path, string sheetName) { FileStream stream = File.Open(path, FileMode.Open, FileAccess.Read); IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream); DataSet dataSet = excelReader.AsDataSet(); int rows = dataSet.Tables[sheetName].Rows.Count; int columns = dataSet.Tables[sheetName].Columns.Count; string[,] result = new string[rows,columns]; for (int i = 0; i < rows; i++) { for (int j = 0; j < columns; j++) { result[i,j] = dataSet.Tables[sheetName].Rows[i][j].ToString(); Debug.Log(result[i, j]); } } stream.Close(); stream.Dispose(); excelReader.Close(); excelReader.Dispose(); return result; } }
动画切割:
这里我有一个AnimClip.xlsx文件,文件中有两个sheet,一个叫all,用来记录需要切割的模型的名字,一个是rrobot,用来记录模型rrobot的动画切割信息
using UnityEngine;using System;using System.Collections;using System.Collections.Generic;public static class AnimationClipConfig{ public static bool isInit = false; public static List<Model> modelList = new List<Model>(); public static void Init() { if (isInit) return; isInit = true; string[,] names = ReadXLSX.Read(Application.dataPath + @"\AnimClip.xlsx", "all"); for (int i = 1; i < names.GetLength(0); i++) { string[,] clips = ReadXLSX.Read(Application.dataPath + @"\AnimClip.xlsx", names[i, 0]); Model model = new Model(names[i, 0]); for (int j = 1; j < clips.GetLength(0); j++) { string clipName = clips[j, 0]; int clipFirstFrame = Convert.ToInt32(clips[j, 1]); int clipLastFrame = Convert.ToInt32(clips[j, 2]); bool clipIsLoop = Convert.ToBoolean(clips[j, 3]); model.animClips.Add(new AnimClip(clipName, clipFirstFrame, clipLastFrame, clipIsLoop)); } modelList.Add(model); } } #region public class AnimClip { public string name; public int firstFrame; public int lastFrame; public bool isloop; public AnimClip(string name, int firstFrame, int lastFrame, bool isloop) { this.name = name; this.firstFrame = firstFrame; this.lastFrame = lastFrame; this.isloop = isloop; } } public class Model { public string name; public List<AnimClip> animClips = new List<AnimClip>(); public Model(string name) { this.name = name; } } #endregion}
using UnityEditor; using UnityEngine; public class FBXAnimationsCut : AssetPostprocessor { public void OnPreprocessModel() { //当前正在导入的模型 ModelImporter modelImporter = (ModelImporter) assetImporter; AnimationClipConfig.Init(); foreach (AnimationClipConfig.Model item in AnimationClipConfig.modelList) { //当前导入模型的路径包含我们动画数据表中的模型名字,那就要对这个模型的动画进行切割 if (assetPath.Contains(item.name)) { modelImporter.animationType = ModelImporterAnimationType.Legacy; modelImporter.generateAnimations = ModelImporterGenerateAnimations.GenerateAnimations; //modelImporter.splitAnimations = true; ModelImporterClipAnimation[] animations = new ModelImporterClipAnimation[item.animClips.Count]; for (int i = 0; i < item.animClips.Count; i++) { animations[i] = SetClipAnimation(item.animClips[i].name, item.animClips[i].firstFrame, item.animClips[i].lastFrame, item.animClips[i].isloop); } modelImporter.clipAnimations = animations; } } } ModelImporterClipAnimation SetClipAnimation(string name, int first, int last, bool isLoop) { ModelImporterClipAnimation tempClip = new ModelImporterClipAnimation(); tempClip.name = name; tempClip.firstFrame = first; tempClip.lastFrame = last; tempClip.loop = isLoop; if (isLoop) tempClip.wrapMode = WrapMode.Loop; else tempClip.wrapMode = WrapMode.Default; return tempClip; }}
0 0
- [Unity基础]解析excel以及动画切割
- UFT基础_16作业讲解-切割字符串以及字典重构excel
- Unity 解析Excel
- Unity动画系统基础
- 全面解析Unity动画系统
- Unity 使用Linq解析Excel
- 【Unity动画】之基础概念
- Unity 基础 XML文件解析
- [Unity脚本基础] 代码解析
- java excel构造以及解析
- Java POI 导入Excel以及解析Excel
- Android基础Fragment以及动画
- Unity大型地图切割
- unity 网格切割
- unity 精灵切割
- unity C#将excel解析为json
- unity基础开发----页面加载动画代码
- [Unity基础]unity5中的动画系统(一)
- 红帽订阅管理器跳出解决方法
- 程序员的鄙视链
- 敏捷脑图用例实践之路
- ZOJ 2615——用栈模拟dfs
- 推荐7本书201505
- [Unity基础]解析excel以及动画切割
- 算法分析与设计实验三 回溯法 24点问题 n皇后问题
- QT解压缩文件
- building outline 问题及set, mutilset以及堆的一些理解
- Linux下安装绿色版Oracle客户端备忘录
- BLE功耗问题
- 获取Android设备唯一标识码的几种方式详解
- Copley驱动器控制永磁同步电机设置步骤
- 自定义UITextField的背景及全面解析