博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
不可能的工作:在FBX模型导入脚本中生成模型的预置体
阅读量:6440 次
发布时间:2019-06-23

本文共 2646 字,大约阅读时间需要 8 分钟。

#if UNITY_EDITORusing 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
(); 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文件夹下所有的材质文件,替换它的shader var 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

 

转载于:https://www.cnblogs.com/timeObjserver/p/8311344.html

你可能感兴趣的文章
ora-01033:oracle initialization or shutdown in progress 解决方法
查看>>
移动自动化相关名词解释
查看>>
微信开发者工具 快捷键
查看>>
monkey测试===修改adb的默认端口
查看>>
AsyncTask和Handler处理异步消息
查看>>
Scheme 中的 pair 和 list 简述
查看>>
iOS AVAssetExportSession 视频剪切、合并、压缩
查看>>
我收藏的技术知识图(每张都是大图)
查看>>
Spring Boot制作启动图案
查看>>
《Linux内核设计与实现》读书笔记(十一)- 定时器和时间管理
查看>>
hdu Oil Deposits
查看>>
彻底理解javascript中的this指针
查看>>
SAS去空格
查看>>
Spring Cloud构建微服务架构(二)服务消费者
查看>>
这些老外的开源技术养活了一票国产软件
查看>>
Maven实战(六)--- dependencies与dependencyManagement的区别
查看>>
创业者应该有的5个正常心态(转)
查看>>
php模式设计之 注册树模式
查看>>
【Android UI设计与开发】3.引导界面(三)实现应用程序只启动一次引导界面
查看>>
_ENV和_G
查看>>