//----------------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 initializationvoid 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的文件名。