Unity运行时,动态创建的Mesh挂载到MeshFilter组件上,并不能保存到本地Prefab文件里。在运行的场景里,拖拽正确配置的MeshFilter对象到Unity资源管理器。生成的Prefab文件,里面的Mesh对象会missing。所以,我们需要在运行状态,导出Mesh到本地生成一个obj模型文件。
原理,就是根据obj文件的属性,把运行时Mesh的顶点,索引,贴图数据转化为固定格式流写入文件,生成obj模型文件。
private string MeshToString(MeshFilter mf, Vector3 scale)
{
Mesh mesh = mf.mesh;
Material[] sharedMaterials = mf.GetComponent<Renderer>().sharedMaterials;
Vector2 textureOffset = mf.GetComponent<Renderer>().material.GetTextureOffset("_MainTex");
Vector2 textureScale = mf.GetComponent<Renderer>().material.GetTextureScale ("_MainTex");
StringBuilder stringBuilder = new StringBuilder().Append("mtllib design.mtl")
.Append("\n")
.Append("g ")
.Append(mf.name)
.Append("\n");