예제 #1
0
    static string processMesh(Transform t)
    {
        StringBuilder meshString = new StringBuilder();
        Terrain       terrain    = t.gameObject.GetComponent <Terrain>();

        if (!terrain)
        {
            MeshFilter mf = t.GetComponent <MeshFilter>();

            if (mf)
            {
                long idTriangleMesh;
                triangleMeshIds.TryGetValue(t.GetInstanceID(), out idTriangleMesh);
                meshString.Append(ExportToPhysXScript.MeshToString(mf.sharedMesh, idTriangleMesh));
            }

            for (int i = 0; i < t.childCount; i++)
            {
                meshString.Append(processMesh(t.GetChild(i)));
            }
        }
        else
        {
            long idTriangleMesh;
            triangleMeshIds.TryGetValue(t.GetInstanceID(), out idTriangleMesh);
            Mesh m = ExportToPhysXScript.createMesh(terrain.terrainData, t.position);
            meshString.Append(ExportToPhysXScript.MeshToString(m, idTriangleMesh));
        }

        return(meshString.ToString());
    }
예제 #2
0
    static string processTransform(Transform t, Vector3 parentGlobalPosition)
    {
        StringBuilder meshString     = new StringBuilder();
        Vector3       globalPosition = t.localPosition + parentGlobalPosition;
        Terrain       terrain        = t.gameObject.GetComponent <Terrain>();

        if (!terrain)
        {
            MeshFilter mf = t.GetComponent <MeshFilter>();

            if (mf)
            {
                int  key;
                long idRigidStatic, idTriangleMesh, idMaterial;
                sharedMaterialIds.TryGetValue(t.GetInstanceID(), out key);
                materialIds.TryGetValue(key, out idMaterial);
                triangleMeshIds.TryGetValue(t.GetInstanceID(), out idTriangleMesh);
                rigidStaticIds.TryGetValue(t.GetInstanceID(), out idRigidStatic);
                meshString.Append(ExportToPhysXScript.TransformToString(t, idRigidStatic, idTriangleMesh, idMaterial, globalPosition));
            }

            for (int i = 0; i < t.childCount; i++)
            {
                meshString.Append(processTransform(t.GetChild(i), globalPosition));
            }
        }
        else
        {
            int  key;
            long idRigidStatic, idTriangleMesh, idMaterial;
            sharedMaterialIds.TryGetValue(t.GetInstanceID(), out key);
            materialIds.TryGetValue(key, out idMaterial);
            triangleMeshIds.TryGetValue(t.GetInstanceID(), out idTriangleMesh);
            rigidStaticIds.TryGetValue(t.GetInstanceID(), out idRigidStatic);
            meshString.Append(ExportToPhysXScript.TransformToString(t, idRigidStatic, idTriangleMesh, idMaterial, globalPosition));
        }

        return(meshString.ToString());
    }
예제 #3
0
    static string processMaterial(Transform t)
    {
        StringBuilder meshString = new StringBuilder();
        Terrain       terrain    = t.gameObject.GetComponent <Terrain>();

        if (!terrain)
        {
            MeshFilter mf = t.GetComponent <MeshFilter>();

            if (mf)
            {
                if (!materialIds.ContainsKey(mf.collider.sharedMaterial.GetInstanceID()))
                {
                    long idMaterial = idGenerator();
                    materialIds.Add(mf.collider.sharedMaterial.GetInstanceID(), idMaterial);
                    meshString.Append(ExportToPhysXScript.MaterialToString(mf.collider.sharedMaterial, idMaterial));
                }
            }

            for (int i = 0; i < t.childCount; i++)
            {
                meshString.Append(processMaterial(t.GetChild(i)));
            }
        }
        else
        {
            if (!materialIds.ContainsKey(terrain.terrainData.physicMaterial.GetInstanceID()))
            {
                long idMaterial = idGenerator();
                materialIds.Add(terrain.terrainData.physicMaterial.GetInstanceID(), idMaterial);
                meshString.Append(ExportToPhysXScript.MaterialToString(terrain.terrainData.physicMaterial, idMaterial));
            }
        }

        return(meshString.ToString());
    }