unity 导出模型
不论unity是否运行,到处其中的模型方法:
1.如下图建立相关文件目录,并建立如下脚本
2.脚本代码
- using UnityEngine;
- using UnityEditor;
- using System.Collections;
- using System.IO;
- using System.Text;
- public class ObjExporterScript
- {
- private static int StartIndex = ;
- public static void Start()
- {
- StartIndex = ;
- }
- public static void End()
- {
- StartIndex = ;
- }
- public static string MeshToString(MeshFilter mf, Transform t)
- {
- Vector3 s = t.localScale;
- Vector3 p = t.localPosition;
- Quaternion r = t.localRotation;
- int numVertices = ;
- Mesh m = mf.sharedMesh;
- if (!m)
- {
- return "####Error####";
- }
- Material[] mats = mf.GetComponent<Renderer>().sharedMaterials;
- StringBuilder sb = new StringBuilder();
- foreach (Vector3 vv in m.vertices)
- {
- Vector3 v = t.TransformPoint(vv);
- numVertices++;
- sb.Append(string.Format("v {0} {1} {2}\n", v.x, v.y, -v.z));
- }
- sb.Append("\n");
- foreach (Vector3 nn in m.normals)
- {
- Vector3 v = r * nn;
- sb.Append(string.Format("vn {0} {1} {2}\n", -v.x, -v.y, v.z));
- }
- sb.Append("\n");
- foreach (Vector3 v in m.uv)
- {
- sb.Append(string.Format("vt {0} {1}\n", v.x, v.y));
- }
- for (int material = ; material < m.subMeshCount; material++)
- {
- sb.Append("\n");
- sb.Append("usemtl ").Append(mats[material].name).Append("\n");
- sb.Append("usemap ").Append(mats[material].name).Append("\n");
- int[] triangles = m.GetTriangles(material);
- for (int i = ; i < triangles.Length; i += )
- {
- sb.Append(string.Format("f {0}/{0}/{0} {1}/{1}/{1} {2}/{2}/{2}\n",
- triangles[i] + + StartIndex, triangles[i + ] + + StartIndex, triangles[i + ] + + StartIndex));
- }
- }
- StartIndex += numVertices;
- return sb.ToString();
- }
- }
- public class ObjExporter : ScriptableObject
- {
- [MenuItem("File/Export/Wavefront OBJ")]
- static void DoExportWSubmeshes()
- {
- DoExport(true);
- }
- [MenuItem("File/Export/Wavefront OBJ (No Submeshes)")]
- static void DoExportWOSubmeshes()
- {
- DoExport(false);
- }
- static void DoExport(bool makeSubmeshes)
- {
- if (Selection.gameObjects.Length == )
- {
- Debug.Log("Didn't Export Any Meshes; Nothing was selected!");
- return;
- }
- string meshName = Selection.gameObjects[].name;
- string fileName = EditorUtility.SaveFilePanel("Export .obj file", "", meshName, "obj");
- ObjExporterScript.Start();
- StringBuilder meshString = new StringBuilder();
- meshString.Append("#" + meshName + ".obj"
- + "\n#" + System.DateTime.Now.ToLongDateString()
- + "\n#" + System.DateTime.Now.ToLongTimeString()
- + "\n#-------"
- + "\n\n");
- Transform t = Selection.gameObjects[].transform;
- Vector3 originalPosition = t.position;
- t.position = Vector3.zero;
- if (!makeSubmeshes)
- {
- meshString.Append("g ").Append(t.name).Append("\n");
- }
- meshString.Append(processTransform(t, makeSubmeshes));
- WriteToFile(meshString.ToString(), fileName);
- t.position = originalPosition;
- ObjExporterScript.End();
- Debug.Log("Exported Mesh: " + fileName);
- }
- static string processTransform(Transform t, bool makeSubmeshes)
- {
- StringBuilder meshString = new StringBuilder();
- meshString.Append("#" + t.name
- + "\n#-------"
- + "\n");
- if (makeSubmeshes)
- {
- meshString.Append("g ").Append(t.name).Append("\n");
- }
- MeshFilter mf = t.GetComponent<MeshFilter>();
- if (mf)
- {
- meshString.Append(ObjExporterScript.MeshToString(mf, t));
- }
- for (int i = ; i < t.childCount; i++)
- {
- meshString.Append(processTransform(t.GetChild(i), makeSubmeshes));
- }
- return meshString.ToString();
- }
- static void WriteToFile(string s, string filename)
- {
- using (StreamWriter sw = new StreamWriter(filename))
- {
- sw.Write(s);
- }
- }
- }
3.点击想要导出的模型,然后按file-export-Wavefront obj菜单选择导出即可
unity 导出模型的更多相关文章
- Unity 导出NavMesh (可行走区域判定) 数据给服务器使用
cp790621656 博客专家 Unity 导出NavMesh (可行走区域判定) 数据给服务器使用 发表于2016/9/26 18:15:11 1089人阅读 分类: Unity MMO 这个 ...
- Unity3D 解决用Unity导出的Android工程在6.0及以上设备会弹出一串权限对话框的问题
解决用Unity导出的Android工程在6.0及以上设备会弹出一串权限对话框的问题 <meta-data android:name="unityplayer.SkipPermissi ...
- mysql数据库导出模型到powerdesigner,PDM图形窗口中显示数据列的中文注释
1,mysql数据库导出模型到powerdesigner 2,CRL+Shift+X 3,复制以下内容,执行 '******************************************** ...
- unity导出工程导入到iOS原生工程中详细步骤
一直想抽空整理一下unity原生工程导入iOS原生工程中的详细步骤.做iOS+vuforia+unity开发这么长时间了.从最初的小小白到现在的小白.中间趟过了好多的坑.也有一些的小小收货.做一个喜欢 ...
- Unity导出xcode后自动化导入第三方SDK
最近因为在给项目接入第三方SDK,遇到了一个比较烦人的事情就是,每次出包都要重新根据第三方SDK说明设置xcode,每次最少花20分钟来设置,如果出错的话就不一定是20分钟的事了,所以我决定要做一个自 ...
- 整理的Unity导出安卓工程利用ANT进行多渠道批量打包APK
Unity导出的安卓工程利用ant进行多渠道循环批量打包 一:设置JAVA环境变量 做android开发的配置这个是基础. win7 下配置java环境变量,下面是链接 http://www.cnbl ...
- 学习笔记TF022:产品环境模型部署、Docker镜像、Bazel工作区、导出模型、服务器、客户端
产品环境模型部署,创建简单Web APP,用户上传图像,运行Inception模型,实现图像自动分类. 搭建TensorFlow服务开发环境.安装Docker,https://docs.docker. ...
- 将Unity导出的Eclipse工程转换为AndroidStudio工程
步骤:1)将unity项目导出到文件夹: 转换到安卓平台,这里只勾选google android project.然后导出到自己新建的文件夹. 2)打开导出的文件夹,看到如下内容.这是unity5.x ...
- revit导出模型数据到sqlserver数据库
revit软件可以导出模型数据到sqlserver数据库,有时候,为了对模型做数据分析,需要导出模型的数据,下面总结一下导出过程: 首先在sqlserver中建立一个数据库,如:revit_wujin ...
随机推荐
- chsime.exe cpu占用高
打开管理员的命令提示符,运行 if exist "%SystemRoot%\System32\InputMethod\CHS\ChsIME.exe" (takeown /f &qu ...
- 要不要学习Git(分布式版本控制系统)
做技术的人,要不要学一学Git呢? 提出这个问题,是因为很多小伙伴还不会使用Git. 对于任何新一代的技术工具,它在业界普及都有一个过程,Git的阻碍是:学习成本.工具迭代的成本. SVN诞生于200 ...
- 从壹开始 [Admin] 之五 ║ 实现『按钮』级别权限配置
一.前情回顾 哈喽大家好,在这个欢庆的日子里,老张祝大家工作都能蒸蒸日上!今天正好也是社团成立的第一天,我也是希望今天能是个纪念日,沾沾这个大喜庆! 放假这两天,倒是学到了很多东西,我这个也是承认的, ...
- idea 启动springboot项目报找不到主类
今天搭建的一个新springboot项目,运行启动类时控制报找不到主类错误 解决方法: 在idea控制台输入mvn clean install命令
- centos 升级curl版本
1.安装repo rpm -Uvh http://www.city-fan.org/ftp/contrib/yum-repo/rhel6/x86_64/city-fan.org-release-2-1 ...
- redis安装详细
1.cd命令到你的下载文件夹下 2.输入命令下载redis ,可以自己选择下载的路径,redis表示版本号 wget http://download.redis.io/releases/redis ...
- Xadmin查询
目录 深浅coopy运用 ModelForm的补充 提取模型当中相关属性 getattr和get_field的区别 __ str__,get_field,getattr初识 str ,当用getatt ...
- CSS样式手册
字体属性:(font) 大小 {font-size: x-large;}(特大) xx-small;(极小) 一般中文用不到,只要用数值就可以,单位:PX.PD 样式 {font-style: obl ...
- JS相关实训
今天又是无聊的一天,我的脑袋一直在嗡嗡叫,想着一些奇怪的问题,比如我为什么总是感到这么失落,为什么我喜欢的女孩不喜欢我呢,真是头大啊.不过既然有作业了我这个五好公民当然要认真写了.没时间让我思考这么复 ...
- Jenkins构建Jmeter项目
1.启动jenkins 2.新建自由风格的项目 定时任务 构建操作 安装HTML Publisher插件 构建后操作 最后保存构建,查看报告