protected override void Serialize(SkinnedMeshRenderer obj, ref BinaryWriter writer, SerializerFactory serializer) { Stream stream = null; if (StoreInline) { stream = writer.BaseStream; } else { //TODO: write relative file path throw new NotImplementedException("Cannot store meshes in a separate file yet"); } //store bones writer.Write(obj.bones.Length); foreach (var bone in obj.bones) { writer.Write(serializer.ReferenceMap[bone]); } writer.Write(obj.sharedMaterials.Length); foreach (var material in obj.sharedMaterials) { serializer.InternalSerialize(material, ref writer); } writer.Write((int)obj.quality); writer.Write(obj.localBounds); //store mesh UnityMeshFile.Write(stream, obj.sharedMesh, meshConfig); }
void Export() { var fileName = EditorUtility.SaveFilePanel("Export .unm file", "", _selection.name, "unm"); if (string.IsNullOrEmpty(fileName)) { return; } using (Stream stream = new FileStream(fileName, FileMode.OpenOrCreate)) { UnityMeshFile.Write(stream, _selection); } }
protected override SkinnedMeshRenderer Deserialize(ref BinaryReader reader, Object parent, SerializerFactory serializer) { Stream stream = null; if (StoreInline) { stream = reader.BaseStream; } else { //TODO: write relative file path throw new NotImplementedException("Cannot read meshes from a separate file yet"); } var skin = (parent as Transform).gameObject.AddComponent <SkinnedMeshRenderer>(); var boneCount = reader.ReadInt32(); var bones = new Transform[boneCount]; for (int i = 0; i < bones.Length; i++) { var boneID = reader.ReadInt32(); bones[i] = serializer.ReferenceMap[boneID] as Transform; } var materialCount = reader.ReadInt32(); var materials = new Material[materialCount]; //todo: serialize materials for (int i = 0; i < materialCount; i++) { materials[i] = serializer.InternalDeserialize(ref reader, skin) as Material; } var quality = (SkinQuality)reader.ReadInt32(); var bounds = reader.ReadBounds(); var mesh = UnityMeshFile.Read(stream, meshConfig); skin.sharedMesh = mesh; skin.bones = bones; skin.quality = quality; skin.localBounds = bounds; return(skin); }
static void Import() { var filePath = EditorUtility.OpenFilePanel("Import .unm file", "", "unm"); if (string.IsNullOrEmpty(filePath)) { return; } Mesh mesh; using (Stream stream = new FileStream(filePath, FileMode.Open)) { mesh = UnityMeshFile.Read(stream); } var filename = Path.GetFileNameWithoutExtension(filePath); filePath = EditorUtility.SaveFilePanelInProject("Save asset", filename, "asset", ""); if (string.IsNullOrEmpty(filePath)) { return; } AssetDatabase.CreateAsset(mesh, filePath); }