Ejemplo n.º 1
0
        public void Export(World world)
        {
            var    config     = Plugin.Instance.Config;
            string exportPath = config.ExportDirPath + "\\" + world.ExportFileName + ".pmx";

            File.Delete(exportPath);

            using (var stream = new FileStream(exportPath, FileMode.Create, FileAccess.Write))
            {
                var exporter = new PmxExporter(stream);

                var data = new PmxModelData();
                GetData(data);

                data.Header.ModelName    = config.ModelName;
                data.Header.Description += config.ModelDescription;

                exporter.Export(data);

                Console.WriteLine("出力完了 : " + world.ExportFileName);
                Console.WriteLine("頂点数 : " + String.Format("{0:#,0}", data.VertexArray.Length));
                Console.WriteLine("面数 : " + String.Format("{0:#,0}", data.VertexIndices.Length / 3));
                Console.WriteLine("材質数 : " + String.Format("{0:#,0}", data.MaterialArray.Length));
                Console.WriteLine("ボーン数 : " + String.Format("{0:#,0}", data.BoneArray.Length));
                Console.WriteLine("モーフ数 : " + String.Format("{0:#,0}", data.MorphArray.Length));
            }
        }
        private void ExportModel(object sender, ModelExportEventArgs args)
        {
            try
            {
                SaveUserPreferences();

                var maid          = GameMain.Instance.CharacterMgr.GetMaid(0);
                var materialState = maid.PrepareMaterialsForExport();

                try
                {
                    var meshes = FindObjectsOfType <SkinnedMeshRenderer>()
                                 .Where(smr => smr.name != "obj1")
                                 .Distinct()
                                 .ToList();

                    IExporter exporter;

                    switch (args.Format)
                    {
                    case ModelFormat.Pmx:
                        exporter = new PmxExporter();
                        break;

                    case ModelFormat.Obj:
                        exporter = new ObjExporter();
                        break;

                    default:
                        throw new Exception($"Unknown model format: {args.Format}");
                    }

                    exporter.ExportFolder = args.Folder;
                    exporter.ExportName   = args.Name;
                    exporter.SavePostion  = args.SavePosition;
                    exporter.SaveTexture  = args.SaveTexture;
                    exporter.Export(meshes);
                }
                finally
                {
                    maid.RestoreMaterialsAfterExport(materialState);
                }
            }
            catch (Exception error)
            {
                Debug.LogError($"Error exporting {args.Format}: {error.Message}\n\nStack trace:\n{error.StackTrace}");
            }
        }
        public void Export()
        {
            string exportPath = World.PmxExportPath;

            File.Delete(exportPath);

            using (var stream = new FileStream(exportPath, FileMode.Create, FileAccess.Write))
            {
                var exporter = new PmxExporter(stream);

                var data = new PmxModelData();
                GetData(data);

                exporter.Export(data);

                Console.WriteLine("出力完了 : " + World.ExportFileName);
                Console.WriteLine("頂点数 : " + String.Format("{0:#,0}", data.VertexArray.Length));
                Console.WriteLine("面数 : " + String.Format("{0:#,0}", data.VertexIndices.Length / 3));
                Console.WriteLine("材質数 : " + String.Format("{0:#,0}", data.MaterialArray.Length));
                Console.WriteLine("テクスチャ数 : " + String.Format("{0:#,0}", data.TextureFiles.Length));
                Console.WriteLine("ボーン数 : " + String.Format("{0:#,0}", data.BoneArray.Length));
                Console.WriteLine("モーフ数 : " + String.Format("{0:#,0}", data.MorphArray.Length));
            }
        }