public void packSkel() { List <string> pathList = new List <string>(); pathList.Add(m_skelMeshParam.m_inPath); pathList.Add(m_skelMeshParam.m_name); string resPath = ExportUtil.getRelDataPath(UtilPath.combine(pathList.ToArray())); GameObject go = AssetDatabase.LoadAssetAtPath(resPath, ExportUtil.convResStr2Type("prefab")) as GameObject; GameObject subMeshGo = null; string skelNoExt = UtilPath.getFileNameNoExt(m_skelMeshParam.m_name); string outPrefabPath = ""; List <Object> objList = new List <Object>(); List <string> assetNamesList = new List <string>(); GameObject instanceGo; pathList.Clear(); if (string.IsNullOrEmpty(m_skelMeshParam.m_outPath)) { pathList.Add(SkinAnimSys.m_instance.m_xmlSubMeshRoot.m_outPath); } else { pathList.Add(m_skelMeshParam.m_outPath); } //pathList.Add(SkinAnimSys.m_instance.m_xmlSkeletonRoot.m_modelTypes.modelTypeDic[m_skelMeshParam.m_modelType].subPath); pathList.Add(skelNoExt + ".prefab"); outPrefabPath = ExportUtil.getRelDataPath(UtilPath.combine(pathList.ToArray())); assetNamesList.Add(outPrefabPath); // 原始的资源是不能修改的,必须要 Instantiate 后才能修改,因此这里 Instantiate 一个 GameObject instanceGo = UtilApi.Instantiate(go) as GameObject; //PrefabUtility.CreatePrefab(outPrefabPath, go); //go = AssetDatabase.LoadAssetAtPath(outPrefabPath, ExportUtil.convResStr2Type("prefab")) as GameObject; Animator animator = null; if (instanceGo != null) { // 单位化转换 UtilApi.normalRST(instanceGo.transform); // 释放子模型 foreach (SubMesh subMesh in m_subMeshList) { subMeshGo = instanceGo.transform.Find(subMesh.m_name).gameObject; if (subMeshGo != null) { //GameObject.DestroyImmediate(subMeshGo); //GameObject.Destroy(subMeshGo); //GameObject.DestroyImmediate(subMeshGo, true); UtilApi.DestroyImmediate(subMeshGo, false); } } // 添加控制器 string controlPath = string.Format("{0}/{1}.controller", m_skelMeshParam.m_controllerPath, skelNoExt); controlPath = ExportUtil.getRelDataPath(controlPath); animator = instanceGo.GetComponent <Animator>(); UnityEngine.Object assetObj = AssetDatabase.LoadAssetAtPath(controlPath, typeof(AnimatorController)); animator.runtimeAnimatorController = assetObj as RuntimeAnimatorController; // 保存资源 PrefabUtility.CreatePrefab(outPrefabPath, instanceGo); AssetDatabase.Refresh(); AssetDatabase.SaveAssets(); UtilApi.DestroyImmediate(instanceGo, false); // 现在不直接打包,需要最后发布的时候才打包 //go = AssetDatabase.LoadAssetAtPath(outPrefabPath, ExportUtil.convResStr2Type("prefab")) as GameObject; //objList.Add(go); // AssetBundleParam bundleParam = new AssetBundleParam(); //#if UNITY_5 // bundleParam.m_buildList = new AssetBundleBuild[1]; // bundleParam.m_buildList[0].assetBundleName = skelNoExt; // bundleParam.m_buildList[0].assetBundleVariant = ExportUtil.UNITY3D; // bundleParam.m_buildList[0].assetNames = assetNamesList.ToArray(); // pathList.Clear(); // pathList.Add(m_skelMeshParam.m_outPath); // bundleParam.m_pathName = ExportUtil.getStreamingDataPath(ExportUtil.combine(pathList.ToArray())); //#elif UNITY_4_6 || UNITY_4_5 // bundleParam.m_assets = objList.ToArray(); // pathList.Clear(); // pathList.Add(m_skelMeshParam.m_outPath); // pathList.Add(skelNoExt + ".unity3d"); // bundleParam.m_pathName = ExportUtil.getStreamingDataPath(ExportUtil.combine(pathList.ToArray())); //#endif // ExportUtil.BuildAssetBundle(bundleParam); } }