Unity3D通過代碼動態生成Prefab與導出UnityPackage

Unity3D通過代碼生成Prefab並導出UnityPackage

首先要明確的問題

不管是生成Prefab和導出UnityPackage都是隻有在編輯器環境下才能使用(在編輯器下運行時也可以)
Prefab不能生成到StreamingAsset文件下,否則無法加載到依賴關係,即使實例化到場景裏,也僅是一個有預製體名字的空物體

Prefab的生成

先貼上代碼:

PrefabUtility.CreatePrefab(prefabFullPath, CREATE_OBJ));

prefabFullPath的格式爲保存的路徑+想要保存的名字+.prefab後綴名
例如:application.datapath+testobj+.prefab

CREATE_OBJ爲你想要保存爲預製體的遊戲物體類

GameObject selectedGameObject = Selection.activeGameObject;

可以通過Selection方法獲得Hierarchy窗口中選中的物體,
也可以通過外部傳,總之這個就是你要製作成預製體的遊戲物體

CreatePrefab方法返回的是一個遊戲物體類

UnityPackage的導出

還是先貼代碼:

  string exprotPath = EditorUtility.SaveFilePanel("導出包路徑", "", "", "unitypackage");
            var AssetPathName = AssetDatabase.GetDependencies(assetPath);
            AssetDatabase.ExportPackage(AssetPathName, exprotPath + "bao.unitypackage", ExportPackageOptions.IncludeDependencies | ExportPackageOptions.Default);

exprotPath爲想要導出的路徑,此處用Unity的SaveFilePanel類,第一個string爲窗口標題,第二個string爲默認打開的目錄,第三個string爲默認文件名(在打開窗口中可以隨意填寫),第四個string爲後綴名,拓展名,此處我們填寫unitypackage

AssetPathName爲一個string數組,值是想要打包的資源的路徑(從Assets/開始算,即只記錄工程目錄即可)
如果你無法確定自己想要導出的資源在工程Assets目錄下哪個位置,可以通過

            var AssetPathName = new string[Selection.objects.Length];
            for (int i = 0; i < AssetPathName.Length; i++)
            {
                AssetPathName[i] = AssetDatabase.GetAssetPath(Selection.objects[i]);
            }

Selection.objects就是你在Project視窗中選擇的物體物體數組,然後再通過GetAssetPath方法獲取到這個資源的在工程中的路徑

GetAssetPath方法也可以用來獲取剛剛我們創建預製體的路徑

 string AssetPath =AssetDatabase.GetAssetPath( PrefabUtility.SaveAsPrefabAsset(CREATE_OBJ, prefabFullPath));

這裏用了新的保存預製體的方法SaveAsPrefabAssets,CreatePrefab方法在新的版本中會被棄用,這個方法的構造參數和CreatePrefab方法相反,需要生成預製體的物體在前面,路徑在後面

當我們獲取到這個AssetsPath之後,還需要通過 AssetDatabase.GetDependencies(assetPath)方法來獲取這個資源的引用關係,才能打包出一個完整的包,這裏可以傳string數組(獲取多個物體的引用),也可以單獨傳一個string(獲取一個物體的引用),返回的都是一個string數組,有了這個引用的數組,我們就可以導出包了

 AssetDatabase.ExportPackage(AssetPathName, exprotPath, ExportPackageOptions.IncludeDependencies);

第一個值就是需要被導出的資源的路徑,如果沒有獲取到引用,你導出的也只是一個Prefab的依賴表,不包含任何模型資源,圖片,材質等資源的,第二個值就是導出路徑+名字,剛剛我們已經尬通過SaveFilePanel獲取到了,這裏直接用就行了,第三個值是導出的模式,一共有四種模式,大家可以詳細自己看一下,IncludeDependencies這個模式就是包含了引用關係的(即使你沒有獲取引用,也會自動去查找引用再導出)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章