示例#1
0
        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);
            }
        }