public SkinMeshData(SkinMeshInfo skinMesh) { name = skinMesh.skinMesh.name; mesh = new MeshData(skinMesh.mesh); bones = new string[skinMesh.skinMesh.bones.Length]; for (int i = 0; i < skinMesh.skinMesh.bones.Length; i++) { bones[i] = GetPathToRoot(skinMesh.skinMesh.transform.parent, skinMesh.skinMesh.bones[i]); } poseCount = skinMesh.skinMesh.sharedMesh.bindposes.Length; bindposes = new Matrix4x4[poseCount]; for (int j = 0; j < poseCount; j++) { bindposes[j] = skinMesh.skinMesh.sharedMesh.bindposes[j]; } rootBone = skinMesh.skinMesh.rootBone.name; bonesPerVert = skinMesh.mesh.mesh.GetBonesPerVertex().ToArray(); vertexCount = bonesPerVert.Length; BoneWeight1[] weigts = skinMesh.mesh.mesh.GetAllBoneWeights().ToArray(); boneIndexes = new int[weigts.Length]; boneWeigts = new float[weigts.Length]; for (int k = 0; k < weigts.Length; k++) { boneIndexes[k] = weigts[k].boneIndex; boneWeigts[k] = weigts[k].weight; } boundsCenter = skinMesh.skinMesh.localBounds.center; boundsExtend = skinMesh.skinMesh.localBounds.extents; }
private void SetObjectData(Transform trans, ParametersController controller, ObjectData data) { // Mesh for non-imported objects if (null == controller || !controller.isImported) { MeshRenderer meshRenderer = trans.GetComponent <MeshRenderer>(); MeshFilter meshFilter = trans.GetComponent <MeshFilter>(); if (null != meshFilter && null != meshRenderer) { // Materials foreach (Material material in meshRenderer.materials) { string materialId = trans.name + "_" + material.name; GetMaterialPath(currentProjectName, materialId, out string materialAbsolutePath, out string materialRelativePath); MaterialInfo materialInfo = new MaterialInfo { relativePath = materialRelativePath, absolutePath = materialAbsolutePath, material = material }; if (!materials.ContainsKey(materialId)) { materials.Add(materialId, materialInfo); } data.materialsData.Add(new MaterialData(materialInfo)); } // Mesh GetMeshPath(currentProjectName, meshFilter.sharedMesh.name, out string meshAbsolutePath, out string meshRelativePath); meshes[meshRelativePath] = new MeshInfo { relativePath = meshRelativePath, absolutePath = meshAbsolutePath, mesh = meshFilter.sharedMesh }; data.meshPath = meshRelativePath; } data.isImported = false; if (trans.TryGetComponent <SkinnedMeshRenderer>(out SkinnedMeshRenderer skinRenderer)) { foreach (Material material in skinRenderer.materials) { string materialId = trans.name + "_" + material.name; GetMaterialPath(currentProjectName, materialId, out string materialAbsolutePath, out string materialRelativePath); MaterialInfo materialInfo = new MaterialInfo { relativePath = materialRelativePath, absolutePath = materialAbsolutePath, material = material }; if (!materials.ContainsKey(materialId)) { materials.Add(materialId, materialInfo); } data.materialsData.Add(new MaterialData(materialInfo)); } GetMeshPath(currentProjectName, skinRenderer.sharedMesh.name, out string meshAbsolutePath, out string meshRelativePath); MeshInfo meshI = new MeshInfo { absolutePath = meshAbsolutePath, relativePath = meshRelativePath, mesh = skinRenderer.sharedMesh }; skinMeshes[meshRelativePath] = new SkinMeshInfo { absolutePath = meshAbsolutePath, relativePath = meshRelativePath, skinMesh = skinRenderer, mesh = meshI }; data.meshPath = meshRelativePath; data.isSkinMesh = true; } } else if (null != controller && controller.isImported) { data.meshPath = controller.importPath; data.isImported = true; } }