不可能的工作:在FBX模型导入脚本中生成模型的预置体
生活随笔
收集整理的這篇文章主要介紹了
不可能的工作:在FBX模型导入脚本中生成模型的预置体
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
不可能的工作:在FBX模型導入腳本中生成模型的預置體
#if UNITY_EDITOR using System.Collections; using System.Collections.Generic; using System.IO; using System.Text; using UnityEditor; using UnityEngine;public class AnimImport : AssetPostprocessor {StringBuilder sb = new StringBuilder();//fbx動畫導入前的處理,對動畫集進行分段設置,劃分為各個子集void OnPreprocessAnimation(){var fpath = Path.GetDirectoryName(assetImporter.assetPath) + "/times.txt";if (!File.Exists(fpath)){//EditorUtility.DisplayDialog("缺少時間配置文件", assetImporter.assetPath + "的動畫分段文件time.txt不存在,動畫子集無法劃分", "ok");return;}var sr = new StreamReader(File.OpenRead(fpath), Encoding.ASCII);var longStr = sr.ReadToEnd();var dats = longStr.Split('\"');var anims = new List<ModelImporterClipAnimation>();for (var i = 0; i < dats.Length; ++i){if (dats[i] == "" || dats[i] == "\r\n")continue;var anim = new ModelImporterClipAnimation();var subdat = dats[i].Split(' ');anim.name = subdat[0];anim.firstFrame = float.Parse(subdat[1].TrimEnd('f'));anim.lastFrame = float.Parse(subdat[2].TrimEnd('f'));anims.Add(anim);}var modelImporter = assetImporter as ModelImporter;modelImporter.clipAnimations = anims.ToArray();}void OnPreprocessModel(){var modelImporter = assetImporter as ModelImporter;modelImporter.globalScale = 0.6f;modelImporter.importMaterials = true;modelImporter.materialName = ModelImporterMaterialName.BasedOnTextureName;}void OnPostprocessModel(GameObject go){var modelImporter = assetImporter as ModelImporter;//1,找到Materials文件夾下所有的材質文件,替換它的shadervar dir = Path.GetDirectoryName(modelImporter.assetPath) + "/Materials";var files = Directory.GetFiles(dir, "*.mat");foreach (var fs in files){var mat = AssetDatabase.LoadAssetAtPath(fs.Replace('\\', '/'), typeof(Material)) as Material;mat.shader = Shader.Find("Qx/Unity/Mobile/Mobile-Diffuse");}AssetDatabase.SaveAssets();//2,創建prefab到assets/res/prefabs/char/下//經試驗,查找文檔,發現在此方法(OnPostprocessModel)中創建prefab是不可能的,其它方法更不可能//方式一,這種方式加載出來的fbx是空的//var fbx = AssetDatabase.LoadAssetAtPath(assetImporter.assetPath, typeof(GameObject)) as GameObject;//方式二,這種方式雖然能成功創建預置體,但創建出的預置體上mesh引用為空(原因見U3D文檔)//var fbx = go;//PrefabUtility.CreatePrefab(Path.GetDirectoryName(modelImporter.assetPath) + "/testfbx.prefab", go); }} #endif?
posted on 2018-01-18 17:21 時空觀察者9號 閱讀(...) 評論(...) 編輯 收藏
總結
以上是生活随笔為你收集整理的不可能的工作:在FBX模型导入脚本中生成模型的预置体的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【转】Unity3d:读取FBX中的动画
- 下一篇: AnimatorController即动