zoukankan      html  css  js  c++  java
  • Unity3D加载火炬之光资源(3Dmax带动画)

    一、目标

    上一篇研究了下将火炬之光的资源导入到Blender中,结果找的几个脚本都不支持动画的导入,不知道是不是因为会blender的程序比较少,

    于是去找了个3dmax的导入脚本,经过一些复杂的工作终于成功在Unity3D 4.0中实现了动画。

    二、工具准备

    1.导入插件

    http://pan.baidu.com/s/1qWmEVcK

    将它放在3dmax的安装目录下的plugin里,就可以用来导入OGRE的模型和动画了,不过这个只是支持转换为XML的.mesh和.skeleton文件

    看下界面:

    先是点Import Mesh,导入.mesh.xml文件,之后是点Import Animation,导入.skeleton.xml文件。

    在游戏中自带的只有.mesh和.skeleton文件,想要得到上面的文件,就要通过OGRE的工具(OgreXMLConverter.exe)来转换了。

    为了方便,我用python写了个简单的脚本,这样我就不用去一个个转换了:

    import os
    import re
    
    
    CONVERT_PATH = 'E:\GameEngine\Ogre\OgreCommandLineTools_1.7.2\OgreXMLConverter.exe';
    SOURCE_PATH = 'E:\GameEngine\Ogre\Cat';
    
    def get_matchedfiles(path):
        matchedlist = [];
        if os.path.exists(path):
            filelist = os.listdir(path);
            print filelist;
            for orifilename in filelist:
                filename = orifilename.lower();
                if re.match('\S*\.mesh$',filename) or re.match('\S*\.skeleton$', filename):
                    matchedlist.append(orifilename);
    
            print matchedlist;
        return matchedlist;
        
    
    def ogre2xml(path):
        matchedlist = get_matchedfiles(path);
        
        for filename in matchedlist:
            cmd = CONVERT_PATH + ' "' + path+'//'+filename + '"';
            print cmd;
            os.system(cmd);
    
        print os.listdir(path);
        
    
    if __name__=="__main__":
       #get_matchedfiles(SOURCE_PATH);
        ogre2xml(SOURCE_PATH);


    把SOURCE_PATH换成你自己模型所在路径文件夹,CONVERT_PATH换成你所下载的工具的路径就可以了,想要递归搜索的就自己再加一些代码吧。

    2.编辑动画

    对于max的动画我了解的不深,从我目前看来,用插件导入的这几个动画都不在一个时间轴上,意味着你每次想导出一个动画,都得有一个FBX文件,这显然是不对。

    在Unity3D中应该是用的一个FBX,然后在同一个时间轴上,取不同的时间段来分离出一个个动作。

    在经过多方资料的查询,终于发现在max 2009以上有动画的导出和导入功能,这样我就能把几个动画人工的合并到一个动画的时间轴上

    参考资料:

    http://forum.unity3d.com/threads/88388-3DS-Max-Export-Multiple-Animations-in-Single-FBX

    首先在导入面板双击idle这个动画,可以在底下时间轴拖动滑动条来观察动画。

    为了导出动画,我们需要选取骨骼,先按F3进入线框模式,这样我们就能看到骨骼了,双击其中一根,就可以选中所有骨骼了。

    选择菜单中的动画-》保存动画

    在弹出的对话框中设置好参数:

    因为我想把idle放第一段,而他的长度(从刚才说的滑动条那里可以看到)是100,所以在分段中设置为0~100。

    保存为idle.xaf。

    然后对attac1的动画做同样的操作,不过把右边的设置变为101-136。

    现在我们就有两个动画了,我要把他们合并到一个时间轴上,现在我们要找一个没有动画的带骨骼的模型,正好

    游戏本身就提供这么一个,就是和模型同名的skeleton文件,这边就是Cat.Skeleton。导入之后会变成是bind,

    在导入面板中可以看到。

    不过我们双击它会看到他的时间轴最大也就到100,而现在两个合并后会延长到136,所以我们要设置一下长度。

    点开设置结束时间为136

    现在导入刚才导出的两个动画文件。

    就可以看到它们在一个时间轴里并成一个动画了,拖动滑动条可以看到结果。

    导出FBX就OK了。

    3.导入Unity3D中

    将FBX直接copy到Unity3D的assets中,我把可以看到他会自动的分出一个Take001的动画。

    Unity4.0的动画系统有了重大的变化,详情还是自己google吧,我自己也还没搞清楚,只是听

    说很是强大。

    本来这个地方是Take001,这是我经过操作后变成这两个动画。

    点击左边那个cat模型,可以看到inspect

    可以看到有个amiation的查看器,底下有clip,可以增加和删除,点击其中的item就可以进入编辑状态,

    最开始是只有一个136的Take001的clip,我改成了一个idle和一个attact1。

    编辑模式里是可以预览的,所以你只要点一个那个三角形的开始按钮,就可以看到你设置的时间对不对。

    最后的结果:

    参考

    http://forums.runicgames.com/viewtopic.php?f=6&t=2311&start=140#p75286

    http://forum.unity3d.com/threads/88388-3DS-Max-Export-Multiple-Animations-in-Single-FBX

    Unity4.0角色动画系统使用,英文视频:

    http://v.youku.com/v_show/id_XNDI1OTUzMTA4.html

  • 相关阅读:
    discuz常用变量
    Discuz!X/模板标签说明
    Discuz x 默认模板文件目录说明
    apache禁止访问文件或目录执行权限、禁止运行脚本PHP文件的设置方法
    基于Java的数据采集(三)
    基于Java的数据采集(二)
    基于Java的数据采集(一)
    使用Spring JDBCTemplate简化JDBC的操作
    基于原生PHP交叉会员权限控制
    PHP上传压缩包并自解压方法
  • 原文地址:https://www.cnblogs.com/gameprogram/p/2858844.html
Copyright © 2011-2022 走看看