2016-12-08 86 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