C# 在运行时将网格转换为stl/obj/fbx

C# 在运行时将网格转换为stl/obj/fbx,c#,android,unity3d,mesh,fbx,C#,Android,Unity3d,Mesh,Fbx,我正在寻找一种方法,在运行时将网格导出为stl/obj/fbx格式,并将其保存在Android手机的本地文件中 我该怎么做?如果有插件的话,我愿意使用它(免费/付费)。这真的很复杂,因为你必须阅读每种格式(stl/obj/fbx)的规范并理解它们才能自己制作一个。幸运的是,已经有很多插件可用于将Unity mesh导出到stl、obj和fbx FBX: 用于在运行时将Unity网格导出到fbx public GameObject objMeshToExport; void Start() {

我正在寻找一种方法,在运行时将网格导出为stl/obj/fbx格式,并将其保存在Android手机的本地文件中


我该怎么做?如果有插件的话,我愿意使用它(免费/付费)。

这真的很复杂,因为你必须阅读每种格式(stl/obj/fbx)的规范并理解它们才能自己制作一个。幸运的是,已经有很多插件可用于将Unity mesh导出到stl、obj和fbx

FBX

用于在运行时将Unity网格导出到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

对于obj,使用

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);
}
publicgameobjectobjmeshtoexport;
void Start()
{
字符串路径=path.Combine(Application.persistentDataPath,“data”);
path=path.Combine(路径,“carmodel”+“.obj”);
//创建不存在的目录
如果(!Directory.Exists(Path.GetDirectoryName(Path)))
{
CreateDirectory(Path.GetDirectoryName(Path));
}
MeshFilter MeshFilter=objMeshToExport.GetComponent();
MeshToFile(meshFilter,path);
}

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);
}
publicgameobjectobjmeshtoexport;
void Start()
{
字符串路径=path.Combine(Application.persistentDataPath,“data”);
path=path.Combine(路径,“carmodel”+“.stl”);
Mesh Mesh=objMeshToExport.GetComponent().Mesh;
//创建不存在的目录
如果(!Directory.Exists(Path.GetDirectoryName(Path)))
{
CreateDirectory(Path.GetDirectoryName(Path));
}
pb_Stl.WriteFile(路径、网格、文件类型.Ascii);
//或
pb_Stl_Exporter.Export(路径,新游戏对象[]{objMeshToExport},文件类型.Ascii);
}

谢谢您的建议。我从未想过在Github中找到插件。。。。。。今天晚些时候我将尝试所有这些插件。我想开发一个Android应用程序(用于一个学校项目),允许用户设计自己的手机壳,然后生成STL/OBJ格式的3D几何文件,可以进行3D打印。(很抱歉,我没有在问题中说清楚。)这就是我需要一个插件在Android应用程序运行时将游戏对象/网格导出到stl/obj/fbx文件的主要原因。我在void Start()中尝试了pb_Stl和UnityFBXExporter(您建议的代码)。但当我打开应用程序,然后打开内部存储时。我发现没有创建任何内容。我想知道这些导出代码是否可以在其他函数中实现,而不是在void Start()中实现。因为我想要实现的是只在点击特定按钮而不是启动应用程序时生成stl文件。所有的评论都是不必要的。您看到的代码只是示例用法,如果将它们放在非
Start
函数中,可以随时使用或调用。在保存模型之前,您可能需要调用
目录.Exists
目录.CreateDirectory
,否则会遇到问题。还输入了“.fbx”作为所有字符的扩展。现在,修复它。请参见编辑。您可以使用
File.Exists
或使用
File.ReadAllBytes