C# 在运行时将网格转换为stl/obj/fbx
我正在寻找一种方法,在运行时将网格导出为stl/obj/fbx格式,并将其保存在Android手机的本地文件中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)的规范并理解它们才能自己制作一个。幸运的是,已经有很多插件可用于将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