public JsonMesh(MeshStorageKey meshKey, ResId id_, ResourceMapper resMap){ id = id_; usageFlags = meshKey.usageFlags; convexCollider = meshKey.usageFlags.HasFlag(MeshUsageFlags.ConvexCollider); triangleCollider = meshKey.usageFlags.HasFlag(MeshUsageFlags.TriangleCollider); var mesh = meshKey.mesh; if (mesh == null) { Debug.LogError("Mesh is null, name!"); return; } name = mesh.name; var filePath = AssetDatabase.GetAssetPath(mesh); resMap.registerAssetPath(filePath); path = filePath; uniqueName = resMap.createUniqueAssetName(filePath, name, meshKey.getMeshAssetSuffix()); var foundMaterials = resMap.findMeshMaterials(mesh); if (foundMaterials != null){ foreach(var cur in foundMaterials){ materials.Add(resMap.getMaterialId(cur)); } } #if !UNITY_EDITOR readable = mesh.isReadable; if (!readable){ Debug.LogErrorFormat(string.Format("Mesh {0} is not marked as readable. Cannot proceed", name); return; } #endif vertexCount = mesh.vertexCount; if (vertexCount <= 0) return; colors = mesh.colors32.toByteArray(); verts = mesh.vertices.toFloatArray(); normals = mesh.normals.toFloatArray(); tangents = mesh.tangents.toFloatArray(); uv0 = mesh.uv.toFloatArray(); uv1 = mesh.uv2.toFloatArray(); uv2 = mesh.uv3.toFloatArray(); uv3 = mesh.uv4.toFloatArray(); uv4 = mesh.uv5.toFloatArray(); uv5 = mesh.uv6.toFloatArray(); uv6 = mesh.uv7.toFloatArray(); uv7 = mesh.uv8.toFloatArray(); subMeshCount = mesh.subMeshCount; for(int i = 0; i < subMeshCount; i++){ var subMesh = new SubMesh(); subMesh.triangles = Utility.copyArray(mesh.GetTriangles(i)); subMeshes.Add(subMesh); } boneWeights.Clear(); boneIndexes.Clear(); defaultSkeletonId = resMap.skelRegistry.getDefaultSkeletonId(meshKey); defaultBoneNames = resMap.skelRegistry.getDefaultBoneNames(meshKey); defaultMeshNodeName = resMap.skelRegistry.getDefaultMeshNodeName(meshKey); defaultMeshNodePath = resMap.skelRegistry.getDefaultMeshNodePath(meshKey); defaultMeshNodeMatrix = resMap.skelRegistry.getDefaultMeshNodeMatrix(meshKey); var srcWeights = mesh.boneWeights; if ((srcWeights != null) && (srcWeights.Length > 0)){ foreach(var cur in srcWeights){ boneIndexes.Add(cur.boneIndex0); boneIndexes.Add(cur.boneIndex1); boneIndexes.Add(cur.boneIndex2); boneIndexes.Add(cur.boneIndex3); boneWeights.Add(cur.weight0); boneWeights.Add(cur.weight1); boneWeights.Add(cur.weight2); boneWeights.Add(cur.weight3); } } blendShapeCount = mesh.blendShapeCount; blendShapes.Clear(); for(int i = 0; i < blendShapeCount; i++){ blendShapes.Add(new JsonBlendShape(mesh, i)); } bindPoses = mesh.bindposes.ToList(); }