2017-10-13 322 views

回答

2

这真的很复杂,因为您必须阅读每种格式(stl/obj/fbx)的规范并理解它们以便自己创建一个。幸运的是,已经有很多插件可以用来将Unity网格导出为stl,obj和fbx。

FBX

UnityFBXExporter用于导出团结网在运行时为FBX。

public GameObject objMeshToExport; 

void Start() 
{ 
    string path = Path.Combine(Application.persistentDataPath, "data"); 
    path = Path.Combine(path, "carmodel"+ ".fbx"); 

    //Create Directory if it does not exist 
    if (!Directory.Exists(Path.GetDirectoryName(path))) 
    { 
     Directory.CreateDirectory(Path.GetDirectoryName(path)); 
    } 

    FBXExporter.ExportGameObjToFBX(objMeshToExport, path, true, true); 
} 

OBJ

对于物镜,使用ObjExporter

public GameObject objMeshToExport; 

void Start() 
{ 
    string path = Path.Combine(Application.persistentDataPath, "data"); 
    path = Path.Combine(path, "carmodel" + ".obj"); 

    //Create Directory if it does not exist 
    if (!Directory.Exists(Path.GetDirectoryName(path))) 
    { 
     Directory.CreateDirectory(Path.GetDirectoryName(path)); 
    } 

    MeshFilter meshFilter = objMeshToExport.GetComponent<MeshFilter>(); 
    ObjExporter.MeshToFile(meshFilter, path); 
} 

STL

可以使用pb_Stl插件STL格式。

public GameObject objMeshToExport; 

void Start() 
{ 
    string path = Path.Combine(Application.persistentDataPath, "data"); 
    path = Path.Combine(path, "carmodel" + ".stl"); 

    Mesh mesh = objMeshToExport.GetComponent<MeshFilter>().mesh; 

    //Create Directory if it does not exist 
    if (!Directory.Exists(Path.GetDirectoryName(path))) 
    { 
     Directory.CreateDirectory(Path.GetDirectoryName(path)); 
    } 


    pb_Stl.WriteFile(path, mesh, FileType.Ascii); 

    //OR 
    pb_Stl_Exporter.Export(path, new GameObject[] { objMeshToExport }, FileType.Ascii); 
} 
+0

感谢您的建议。我从来没有想过在Github上找到插件......我今天晚些时候会尝试所有这些插件。 –

+0

我想开发一个Android应用程序(用于学校项目),它允许用户设计自己的手机外壳,然后生成STL/OBJ格式的3D几何文件,这可以用于3D打印。 (对不起,我没有弄清楚这个问题。) 这就是我需要一个插件在Android应用程序运行时将gameobjects/mesh导出为stl/obj/fbx文件的主要原因。 我在void Start()中尝试了pb_Stl和UnityFBXExporter(您建议的代码)。但是,当我打开我的应用程序,然后打开内部存储。我发现没有创建任何东西。 –

+0

我想知道这些导出代码可以在其他函数中实现,而不是void Start()。因为我想要实现的是仅在单击特定按钮而不是应用程序的开始时才生成stl文件。 –