不论unity是否运行,到处其中的模型方法:

1.如下图建立相关文件目录,并建立如下脚本

2.脚本代码

  1. using UnityEngine;
  2. using UnityEditor;
  3. using System.Collections;
  4. using System.IO;
  5. using System.Text;
  6.  
  7. public class ObjExporterScript
  8. {
  9. private static int StartIndex = ;
  10.  
  11. public static void Start()
  12. {
  13. StartIndex = ;
  14. }
  15. public static void End()
  16. {
  17. StartIndex = ;
  18. }
  19.  
  20. public static string MeshToString(MeshFilter mf, Transform t)
  21. {
  22. Vector3 s = t.localScale;
  23. Vector3 p = t.localPosition;
  24. Quaternion r = t.localRotation;
  25.  
  26. int numVertices = ;
  27. Mesh m = mf.sharedMesh;
  28. if (!m)
  29. {
  30. return "####Error####";
  31. }
  32. Material[] mats = mf.GetComponent<Renderer>().sharedMaterials;
  33.  
  34. StringBuilder sb = new StringBuilder();
  35.  
  36. foreach (Vector3 vv in m.vertices)
  37. {
  38. Vector3 v = t.TransformPoint(vv);
  39. numVertices++;
  40. sb.Append(string.Format("v {0} {1} {2}\n", v.x, v.y, -v.z));
  41. }
  42. sb.Append("\n");
  43. foreach (Vector3 nn in m.normals)
  44. {
  45. Vector3 v = r * nn;
  46. sb.Append(string.Format("vn {0} {1} {2}\n", -v.x, -v.y, v.z));
  47. }
  48. sb.Append("\n");
  49. foreach (Vector3 v in m.uv)
  50. {
  51. sb.Append(string.Format("vt {0} {1}\n", v.x, v.y));
  52. }
  53. for (int material = ; material < m.subMeshCount; material++)
  54. {
  55. sb.Append("\n");
  56. sb.Append("usemtl ").Append(mats[material].name).Append("\n");
  57. sb.Append("usemap ").Append(mats[material].name).Append("\n");
  58.  
  59. int[] triangles = m.GetTriangles(material);
  60. for (int i = ; i < triangles.Length; i += )
  61. {
  62. sb.Append(string.Format("f {0}/{0}/{0} {1}/{1}/{1} {2}/{2}/{2}\n",
  63. triangles[i] + + StartIndex, triangles[i + ] + + StartIndex, triangles[i + ] + + StartIndex));
  64. }
  65. }
  66.  
  67. StartIndex += numVertices;
  68. return sb.ToString();
  69. }
  70. }
  71.  
  72. public class ObjExporter : ScriptableObject
  73. {
  74. [MenuItem("File/Export/Wavefront OBJ")]
  75. static void DoExportWSubmeshes()
  76. {
  77. DoExport(true);
  78. }
  79.  
  80. [MenuItem("File/Export/Wavefront OBJ (No Submeshes)")]
  81. static void DoExportWOSubmeshes()
  82. {
  83. DoExport(false);
  84. }
  85.  
  86. static void DoExport(bool makeSubmeshes)
  87. {
  88. if (Selection.gameObjects.Length == )
  89. {
  90. Debug.Log("Didn't Export Any Meshes; Nothing was selected!");
  91. return;
  92. }
  93.  
  94. string meshName = Selection.gameObjects[].name;
  95. string fileName = EditorUtility.SaveFilePanel("Export .obj file", "", meshName, "obj");
  96.  
  97. ObjExporterScript.Start();
  98.  
  99. StringBuilder meshString = new StringBuilder();
  100.  
  101. meshString.Append("#" + meshName + ".obj"
  102. + "\n#" + System.DateTime.Now.ToLongDateString()
  103. + "\n#" + System.DateTime.Now.ToLongTimeString()
  104. + "\n#-------"
  105. + "\n\n");
  106.  
  107. Transform t = Selection.gameObjects[].transform;
  108.  
  109. Vector3 originalPosition = t.position;
  110. t.position = Vector3.zero;
  111.  
  112. if (!makeSubmeshes)
  113. {
  114. meshString.Append("g ").Append(t.name).Append("\n");
  115. }
  116. meshString.Append(processTransform(t, makeSubmeshes));
  117.  
  118. WriteToFile(meshString.ToString(), fileName);
  119.  
  120. t.position = originalPosition;
  121.  
  122. ObjExporterScript.End();
  123. Debug.Log("Exported Mesh: " + fileName);
  124. }
  125.  
  126. static string processTransform(Transform t, bool makeSubmeshes)
  127. {
  128. StringBuilder meshString = new StringBuilder();
  129.  
  130. meshString.Append("#" + t.name
  131. + "\n#-------"
  132. + "\n");
  133.  
  134. if (makeSubmeshes)
  135. {
  136. meshString.Append("g ").Append(t.name).Append("\n");
  137. }
  138.  
  139. MeshFilter mf = t.GetComponent<MeshFilter>();
  140. if (mf)
  141. {
  142. meshString.Append(ObjExporterScript.MeshToString(mf, t));
  143. }
  144.  
  145. for (int i = ; i < t.childCount; i++)
  146. {
  147. meshString.Append(processTransform(t.GetChild(i), makeSubmeshes));
  148. }
  149.  
  150. return meshString.ToString();
  151. }
  152.  
  153. static void WriteToFile(string s, string filename)
  154. {
  155. using (StreamWriter sw = new StreamWriter(filename))
  156. {
  157. sw.Write(s);
  158. }
  159. }
  160. }

3.点击想要导出的模型,然后按file-export-Wavefront obj菜单选择导出即可

unity 导出模型的更多相关文章

  1. Unity 导出NavMesh (可行走区域判定) 数据给服务器使用

    cp790621656 博客专家 Unity 导出NavMesh (可行走区域判定) 数据给服务器使用 发表于2016/9/26 18:15:11  1089人阅读 分类: Unity MMO 这个 ...

  2. Unity3D 解决用Unity导出的Android工程在6.0及以上设备会弹出一串权限对话框的问题

    解决用Unity导出的Android工程在6.0及以上设备会弹出一串权限对话框的问题 <meta-data android:name="unityplayer.SkipPermissi ...

  3. mysql数据库导出模型到powerdesigner,PDM图形窗口中显示数据列的中文注释

    1,mysql数据库导出模型到powerdesigner 2,CRL+Shift+X 3,复制以下内容,执行 '******************************************** ...

  4. unity导出工程导入到iOS原生工程中详细步骤

    一直想抽空整理一下unity原生工程导入iOS原生工程中的详细步骤.做iOS+vuforia+unity开发这么长时间了.从最初的小小白到现在的小白.中间趟过了好多的坑.也有一些的小小收货.做一个喜欢 ...

  5. Unity导出xcode后自动化导入第三方SDK

    最近因为在给项目接入第三方SDK,遇到了一个比较烦人的事情就是,每次出包都要重新根据第三方SDK说明设置xcode,每次最少花20分钟来设置,如果出错的话就不一定是20分钟的事了,所以我决定要做一个自 ...

  6. 整理的Unity导出安卓工程利用ANT进行多渠道批量打包APK

    Unity导出的安卓工程利用ant进行多渠道循环批量打包 一:设置JAVA环境变量 做android开发的配置这个是基础. win7 下配置java环境变量,下面是链接 http://www.cnbl ...

  7. 学习笔记TF022:产品环境模型部署、Docker镜像、Bazel工作区、导出模型、服务器、客户端

    产品环境模型部署,创建简单Web APP,用户上传图像,运行Inception模型,实现图像自动分类. 搭建TensorFlow服务开发环境.安装Docker,https://docs.docker. ...

  8. 将Unity导出的Eclipse工程转换为AndroidStudio工程

    步骤:1)将unity项目导出到文件夹: 转换到安卓平台,这里只勾选google android project.然后导出到自己新建的文件夹. 2)打开导出的文件夹,看到如下内容.这是unity5.x ...

  9. revit导出模型数据到sqlserver数据库

    revit软件可以导出模型数据到sqlserver数据库,有时候,为了对模型做数据分析,需要导出模型的数据,下面总结一下导出过程: 首先在sqlserver中建立一个数据库,如:revit_wujin ...

随机推荐

  1. chsime.exe cpu占用高

    打开管理员的命令提示符,运行 if exist "%SystemRoot%\System32\InputMethod\CHS\ChsIME.exe" (takeown /f &qu ...

  2. 要不要学习Git(分布式版本控制系统)

    做技术的人,要不要学一学Git呢? 提出这个问题,是因为很多小伙伴还不会使用Git. 对于任何新一代的技术工具,它在业界普及都有一个过程,Git的阻碍是:学习成本.工具迭代的成本. SVN诞生于200 ...

  3. 从壹开始 [Admin] 之五 ║ 实现『按钮』级别权限配置

    一.前情回顾 哈喽大家好,在这个欢庆的日子里,老张祝大家工作都能蒸蒸日上!今天正好也是社团成立的第一天,我也是希望今天能是个纪念日,沾沾这个大喜庆! 放假这两天,倒是学到了很多东西,我这个也是承认的, ...

  4. idea 启动springboot项目报找不到主类

    今天搭建的一个新springboot项目,运行启动类时控制报找不到主类错误 解决方法: 在idea控制台输入mvn clean install命令

  5. centos 升级curl版本

    1.安装repo rpm -Uvh http://www.city-fan.org/ftp/contrib/yum-repo/rhel6/x86_64/city-fan.org-release-2-1 ...

  6. redis安装详细

      1.cd命令到你的下载文件夹下 2.输入命令下载redis ,可以自己选择下载的路径,redis表示版本号 wget http://download.redis.io/releases/redis ...

  7. Xadmin查询

    目录 深浅coopy运用 ModelForm的补充 提取模型当中相关属性 getattr和get_field的区别 __ str__,get_field,getattr初识 str ,当用getatt ...

  8. CSS样式手册

    字体属性:(font) 大小 {font-size: x-large;}(特大) xx-small;(极小) 一般中文用不到,只要用数值就可以,单位:PX.PD 样式 {font-style: obl ...

  9. JS相关实训

    今天又是无聊的一天,我的脑袋一直在嗡嗡叫,想着一些奇怪的问题,比如我为什么总是感到这么失落,为什么我喜欢的女孩不喜欢我呢,真是头大啊.不过既然有作业了我这个五好公民当然要认真写了.没时间让我思考这么复 ...

  10. Jenkins构建Jmeter项目

    1.启动jenkins 2.新建自由风格的项目 定时任务 构建操作 安装HTML Publisher插件 构建后操作 最后保存构建,查看报告