开发中经常需要,对美术模型进行一些处理。(以fbx为例)

  例如,需要把动作的名字、start和end加入animations的clips。

  如果手动操作,就是在模型的Inspector窗口,一个动作点一次加号,然后编辑start和end。一个模型往往十几个动作,这样做很明显浪费人力。

  因此需要一个可以自动导入帧数表的工具,工具应该具备一下功能。

  1、根据配置(txt或者json)自动设置模型参数

  配置的格式根据使用习惯,txt、json都可以,这里使用txt。用File.ReadAllLines(“路径”),可以获取配置的每一行信息,只要按照规定方式填写,就可以解析出我们想要的参数。

  例如 动作名+制表符+start+制表符+end。

  2、每次导入模型时,自动生效

  继承了AssetPostprocessor,并且放到Editor目录下,每次资源发生改变时会自动调用里面的方法。

  3、批量处理每一个动作。

  如下,将第一步取出来的参数,用下面方法填入clip列表中,然后复制给模型的ModelImporter的clipAnimations。

 public class clipArrayListCreater
{
private List<ModelImporterClipAnimation> clipList = new List<ModelImporterClipAnimation>();
public void addClip(string name, int firstFrame, int lastFrame, bool loop, WrapMode wrapMode)
{
ModelImporterClipAnimation tempClip = new ModelImporterClipAnimation();
tempClip.name = name;
tempClip.firstFrame = firstFrame;
tempClip.lastFrame = lastFrame;
tempClip.loop = loop;
tempClip.wrapMode = wrapMode;
clipList.Add(tempClip);
}
public ModelImporterClipAnimation[] getArray()
{
return clipList.ToArray();
}
}

  5、设置模型类型和动作误差

  ModelImporter中几个参数一般都在导入时需要处理,animationType ,animationCompression,animationPositionError ,animationRotationError,animationScaleError 。

  一般根据需要设置即可。

  有几点需要说明

  1、帧数表的命名需要一定规范,如,模型名+“帧数表”,

  2、模型应该都放到指定目录,方便管理和工具集中处理。

  把代码放到工程里,路径按照自己的来,等待转菊完成,就duang的一下帧数表自动导入了。

using System.Collections.Generic;
using System.IO;
using UnityEditor;
using UnityEngine; public class AssetsImportTools : AssetPostprocessor
{ void OnPreprocessModel()
{
ModelImporter modelImporter = (ModelImporter)assetImporter;
string lode = modelImporter.assetPath;
if (lode.Contains("Assets/Avatars/FBX"))//模型目录
{
       //模型类型和动作误差
modelImporter.animationType = ModelImporterAnimationType.Legacy;
modelImporter.animationCompression = ModelImporterAnimationCompression.KeyframeReduction;
modelImporter.animationPositionError = 0.5f;
modelImporter.animationRotationError = 0.5f;
modelImporter.animationScaleError = 0.5f;
lode = lode.Replace(".FBX", "帧数表.txt");
if (!File.Exists(lode))
{
Debug.Log(lode + "不存在");
return;
}
string[] modellist = File.ReadAllLines(lode);
editorImporterUtil.clipArrayListCreater creater = new editorImporterUtil.clipArrayListCreater();
for (int i = ; i < modellist.Length; i++)
{
if (modellist[i].Contains("//") || string.IsNullOrEmpty(modellist[i]))//注释和空字符串跳过
continue;
string[] s = modellist[i].Split('\t');//按照制表符切割为,名称 start end 是否循环(可选参数,非必填)
if (s.Length < )
{
if (EditorUtility.DisplayDialog("错误", "{0} 文件的第".EFormat(lode) + (i + ) + "行出错", "确定"))
{
return;
}
}
bool isLoop = false;
if (s[] == "idle" )//循环的动作可以在这里设置,也可以在配置中设置
isLoop = true;
else
isLoop = false;
if (s.Length==)
{
if (!string.IsNullOrEmpty(s[]))
{
isLoop = s[] == "";
}
}
if (isLoop)
creater.addClip(s[], int.Parse(s[]), int.Parse(s[]), false, WrapMode.Loop);
else
creater.addClip(s[], int.Parse(s[]), int.Parse(s[]), false, WrapMode.Default);
modelImporter.clipAnimations = creater.getArray();
}
}
}
}
namespace editorImporterUtil
{
public class clipArrayListCreater
{
private List<ModelImporterClipAnimation> clipList = new List<ModelImporterClipAnimation>();
public void addClip(string name, int firstFrame, int lastFrame, bool loop, WrapMode wrapMode)
{
ModelImporterClipAnimation tempClip = new ModelImporterClipAnimation();
tempClip.name = name;
tempClip.firstFrame = firstFrame;
tempClip.lastFrame = lastFrame;
tempClip.loop = loop;
tempClip.wrapMode = wrapMode;
clipList.Add(tempClip);
}
public ModelImporterClipAnimation[] getArray()
{
return clipList.ToArray();
}
}
}

  

  

Unity3d的模型自动导入帧数表的更多相关文章

  1. Unity3D 如何图形问题修正旋转模型已导入?

     如何纠正旋转模型被导入? 一些立体艺术资源包导出其模式,以便 Z 轴向上.Unity 大多数标准的脚本中假定的三维世界 Y 轴代表了.在 Unity 比改动脚本使其契合easy得多. Z 轴朝上 ...

  2. geotrellis使用(二十一)自动导入数据

    目录 前言 整体介绍 前台界面 后台控制 总结 一.前言        之前Geotrellis数据导入集群采用的是命令行的方式,即通过命令行提交spark任务来ingest数据,待数据导入完毕再启动 ...

  3. 图解SSIS监视文件夹并自动导入数据

    原文:图解SSIS监视文件夹并自动导入数据 演示案例:让系统自动监视文件夹,并把文件夹下面的excel文件导入到sql中,之后清空目录.这个过程以往都需要写程序来实现或者定时执行,现在可以用ssis来 ...

  4. Ipython自动导入Numpy,pandas等模块

    一.引言 最近在学习numpy,书上要求安装一个Ipythpn,可以自动导入Numpy,pandas等数据分析的模块,可是当我安装后,并不能自动导入numpy模块,还需要自己import.我就去查了一 ...

  5. eclipse 包 取消代码第一行package包名 自动补全时取消自动引入包名 修改名字 取消引用 自动导入publilc static void main(String[] args) {}

    --项目 --包 包是为了管理类文件,同个包下不允许同名类文件,但不同包就可以,把类放在包里是规范 (https://zhidao.baidu.com/question/239471930532952 ...

  6. MapperFacade自动导入失败

    MapperFacade自动导入失败 添加以下代码并且保证项目可以扫描到: @Configuration public class OrikaConfig { @Bean public MapperF ...

  7. ipython启动 自动导入模块 自动%logstart

    1. 参考 启动ipython或python解释器自动导入组件(例如:numpy) http://ipython.org/ipython-doc/stable/config/intro.html#se ...

  8. Android studio 自动导入(全部)包 import

    http://blog.csdn.net/buaaroid/article/details/44979629 1 Android studio 只有import单个包的快捷键:Alt+Enter.没有 ...

  9. android studio 自动导入包

    android studio 自动导入包 一.Android studio 的导单个包的快捷键是Alt+Enter (需要选中要导入包的类名再按快捷键才起作用): 二.Android studio 可 ...

随机推荐

  1. Ubuntu远程登陆、SSH图形界面、WOL远程唤醒

    本文为作者原创,转载请注明出处(http://www.cnblogs.com/mar-q/)by 负赑屃 实现目标:通过路由器配置路由路径,将拨号获取的公网IP地址指向局域网Ubuntu服务器.家里有 ...

  2. sessionStorage,UserDataStorage,cookie全兼容写法存在的问题

    最近央视播出了中国诗词大赛,看到了一首诗,送给大家 <春宵·春宵一刻值千金> 作者:苏轼 [宋代] 春宵一刻值千金,花有清香月有阴. 歌管楼台声细细,秋千院落夜沉沉. 好了,言归正传,今天 ...

  3. A Very Simple Problem

    A Very Simple Problem Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...

  4. Game of Connections

    Game of Connections Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...

  5. 解析 C# 7中的元组类型(ValueTuple)

    System.Tuple 类型是在.NET 4.0中引入的,但是有两个明显的缺点: (1) Tuple 类型是引用类型. (2) 没有构造函数支持. 为了解决这些问题,C# 7 引入了新的语言功能以及 ...

  6. eclipse使用maven tomcat插件部署无法关联源代码

    一. 安装sourcelookup插件: 二. 在source lookup path里加入源码: 2.1) 加入项目源码或整个工作空间的源码(不加上连自己的代码都无法查看,默认是不加上的) 2.2) ...

  7. HTTPS协议,TLS协议

    一.HTTPS 协议 HTTPS协议其实就是HTTP over TSL,TSL(Transport Layer Security) 传输层安全协议是https协议的核心. TSL可以理解为SSL (S ...

  8. 前后端分手大师——MVVM 模式

    之前对 MVVM 模式一直只是模模糊糊的认识,正所谓没有实践就没有发言权,通过这两年对 Vue 框架的深入学习和项目实践,终于可以装B了有了拨开云雾见月明的感觉. 简而言之 Model–View–Vi ...

  9. 【转】Entity Framework 5.0系列之约定配置

    Code First之所以能够让开发人员以一种更加高效.灵活的方式进行数据操作有一个重要的原因在于它的约定配置.现在软件开发越来复杂,大家也都试图将软件设计的越来越灵活,很多内容我们都希望是可配置的, ...

  10. Android drawText 做到文字绝对居中

    我们在android中经常会遇到自定义一些组件,因为现有的android组件是往往不能满足当下的需求的,今天就给大家介绍一下在自定义组建过程中用到的drawText不居中的问题的解决方案 首先大家看一 ...