2016-12-08 58 views
2

我正在构建一个测量人体不同部位的应用程序。为此,每次新的人体都将从外部磁盘上传到.obj文件中,所以问题是我无法创建预制件,因为对象没有固定,我必须在运行时加载对象。在游戏模式下加载对象

我已经尝试过使用OBJLoader扩展,但OBJLoader使用UnityEditor,因此它在构建后不工作。

是否有任何解决方案可以在构建之后从外部磁盘加载.obj文件。

我正在为Windows(.exe)构建应用程序。

+0

你试过这个吗? https://www.assetstore.unity3d.com/en/#!/content/49547 – FCin

+0

是的,那OBJLoader类正在使用UnityEditor,它不会在生成之后工作 – Nishit

回答

1

要在运行时加载的obj格式的3D静态模型,请按照下列步骤操作:

  1. obj的文件重命名为*.bytes/*.txtother supported formats

  2. 将文件加载到TextAsset

    TextAsset data = Resources.Load("model.bytes") as TextAsset; 
    
  3. 分析字符串(data.text),并从中提取出的网格数据(顶点位置,指数,UV0,UV1等等)。 obj格式很容易解析,也有很多插件和开源项目可用。

  4. 创建一个Mesh并填充网格数据并将其分配给GameObjectMeshFilter

    Mesh mesh = new Mesh(); 
    GetComponent<MeshFilter>().mesh = mesh; 
    mesh.vertices = newVertices; 
    mesh.uv = newUV; 
    mesh.triangles = newTriangles; 
    

的材料信息也可以从*.mtl文件中提取。只需按照以下步骤操作:使用适当的着色器创建Material,为材质分配纹理并将材质分配到GameObjectMeshRenderersharedMaterial

+1

也要注意生成一个约60k顶点时的Unity限制目。 – Kardux

+0

您能否详细说明第3点,因为按照我的说法,您试图说要手动读取目标文件 – Nishit

+0

是的。您需要手动读取obj文件。 – zwcloud