u3d的ab文件注意事项

//----------------LoadAllAB.cs---------------------

using System.Collections;

using UnityEngine;


namespace System.IO

{

    public class LoadAllAB : MonoBehaviour

    {    

        //读取本地

        string path = "Assets/Actors/lznh/ab/animation/t_bl/";

        // Use this for initialization

        void Start()

        {

            //开始罗列目录内的文件

            if (Directory.Exists(path))

            {

                DirectoryInfo directoryInfo = new DirectoryInfo(path);

                FileInfo[] fileInfos = directoryInfo.GetFiles("*", SearchOption.AllDirectories);

               // Debug.Log(fileInfos.Length);


                for (int i = 0; i < fileInfos.Length;i++ )

                {

                    if (fileInfos[i].Name.EndsWith(".meta"))

                    {

                        continue;

                    }

                   // Debug.Log("Name:" + fileInfos[i].Name);


                    //开始读取目录内的文件

                    AssetBundle ab = AssetBundle.LoadFromFile(path + "/" + fileInfos[i].Name);

                    // 遍历所有object模型

                    object[] objs = ab.LoadAllAssets();


                    //遍历所有UnityEngine.Object模型

                    //UnityEngine.Object [] objs = ab.LoadAllAssets();


                    //遍历所有模型

                    foreach (UnityEngine.Object obj in objs)

                    {

                        //  输出所有模型

                        Instantiate(obj);

                    }

                }


            }


        }

    }

}


//----------------BuildAB.cs--------------------------

using System.IO;

using UnityEditor;

using UnityEngine;


public class BuildAB : MonoBehaviour

{


    //[MenuItem("AssetBundle/Package (Default)")]

    [MenuItem("Assets/Build AssetBundles")]

    static void BuildAllAssetBundles()

    {

        string assetBundleDirectory = "Assets/AssetBundles";

        if (!Directory.Exists(assetBundleDirectory))

        {

            Directory.CreateDirectory(assetBundleDirectory);

        }

        BuildPipeline.BuildAssetBundles(assetBundleDirectory, BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows);

    }

}

-------------虚幻四使用的步骤-------------------
u3d导出ab包,输出skin蒙皮fbx。
首先我们使用LoadAllAB.cs导入所有的ab包,然后使用u3d自带的fbxExporter导出带skin蒙皮权重的fbx文件,注意一定要勾选导出skin蒙皮。
Tfbx的根骨骼要用原来夜神里面的角色资源名称。因为后续动作文件的根也是这个名字,去掉(clone)这部分。确认和skin名字不重复。

ab文件在u3d成功导入后的fbx时候,(我们叫它”Tpose的fbx“,简称Tfbx),在hierarchy改根骨骼为夜深模拟器里的角色资源码,比如M110005,生成Tfbx后再改为本身的文件名。这样,根骨骼都为M110005了,确认和skin名字不重复。

导入虚幻四才不会报错。
多组件身体部位的skin导入及合并。
如果碰到的是身体分组件,比如头肩,手,身,腿,脚。这种的,在第一次导入fbx的时候选择把所有骨骼都转为dummy物体,然后另存为max文件,然后再把这些max文件合并成一个文件,选择删除旧的重名物体,这样,所有的组件的skin都公用一个dummy的骨骼树了,再次输出为把dummy转换为bone骨骼)
Tfbx在u3d中生成ab文件,得到animator动画控制器,和动作片段一起输出Afbx文件。

然后这个Tfbx生成的预制体prefabs直接改ab名字,生成新的带animator的ab文件,改名为M110005,和动作片段animationClip的ab文件一起选择用assectsStudio导出动作Afbx文件。这个根骨骼是以新带animator的ab文件名命名的(因为目前还没有直接读取ab文件里的动画能力)
存在Tfbx和Afbx得尺寸不一样得情况。

看具体情况,有可能这个Tfbx的比例可能比动画Afbx文件的大100倍。所以要缩小为1%。才和动画文件Afbx一致,有点坑。

所以在虚幻四里导入动作文件要放大100倍。或者Tfbx文件缩小100倍。

---------u3d使用的步骤-----------------------

而在u3d中使用就很简单了,因为所有u3d的角色的根骨骼都是用文件名为根,所以不存在root根骨骼名不一致问题。也就不存在和skin蒙皮模型文件名一样导致出错。

而且这个skin在不同动画文件里不一样都没关系!它只要层级和主骨骼树(也就是cs的骨骼链)一致就行,骨骼树一致的就可以映射到动作,不一致的就不能映射到动作。

所以只需要加载几个不同的动画Afbx,加载第一个Afbx的模型。其他Afbx的动作,根本不再需要Tfbx了。

以下是动画映射成功的两个文件,Tfbx的mesh和bip_body一级,父级是bp_root
 


动画Afbx是mesh和bp_root一级,父级是Tfbx的文件名。

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值