ImportArtsRes.cs 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211
  1. using UnityEditor;
  2. using UnityEngine;
  3. using System.IO;
  4. using System;
  5. using System.Collections.Generic;
  6. using GFGGame;
  7. namespace GFGEditor
  8. {
  9. public class ImportArtsRes
  10. {
  11. public static string ragule = @"^[0-9a-zA-Z_]{1,}$";
  12. public static string Md5FilePath = "Assets/MD5";
  13. private static string[] FieldGuideIconSrcPaths = new string[] { "../../../gfg/正式资源/图鉴/" };
  14. public static string FieldGuideIconTargetPath = $"{ResPathUtil.TEXTURE_DIR_PATH}/FieldGuide/Icon/";
  15. public static string FieldGuideIconMd5FileSaveName = "FieldGuideIconMd5";
  16. private static string[] MusicSrcPaths = new string[] { "../../../gfg/正式资源/music/" };
  17. public static string MusicTargetPath = $"{ResPathUtil.MUSIC_DIR_PATH}/";
  18. public static string MusicMd5FileSaveName = "MusicMd5";
  19. private static string[] ItemIconSrcPaths = new string[] { "../../../gfg/正式资源/icon/" };
  20. public static string ItemIconTargetPath = $"{ResPathUtil.TEXTURE_DIR_PATH}/Icon/";
  21. public static string IconMd5FileSaveName = "IconMd5";
  22. private static string[] DressUpSrcPaths = new string[] { "../../../gfg/正式资源/suit/" };
  23. public static string DressUpTargetPath = $"{ResPathUtil.TEXTURE_DIR_PATH}/DressUp/";
  24. public static string DressUpMd5FileSaveName = "DressUpMd5";
  25. private static string[] NpcHeadSrcPaths = new string[] { "../../../gfg/正式资源/npc/对战头像/" };
  26. public static string NpcHeadTargetPath = $"{ResPathUtil.TEXTURE_DIR_PATH}/Npc/Head/";
  27. public static string HeadMd5FileSaveName = "HeadMd5";
  28. private static string[] NpcPicSrcPaths = new string[] { "../../../gfg/正式资源/npc/对战立绘/" };
  29. public static string NpcPicTargetPath = $"{ResPathUtil.TEXTURE_DIR_PATH}/Npc/PicF/";
  30. public static string PicFMd5FileSaveName = "PicFMd5";
  31. private static string[] NpcPicSSrcPaths = new string[] { "../../../gfg/正式资源/npc/对话立绘/" };
  32. public static string NpcPicSTargetPath = $"{ResPathUtil.TEXTURE_DIR_PATH}/Npc/PicS/";
  33. public static string PicSMd5FileSaveName = "PicSMd5";
  34. private static string[] BgSrcPaths = new string[] { "../../../gfg/正式资源/scene/" };
  35. public static string BgTargetPath = $"{ResPathUtil.TEXTURE_DIR_PATH}/DressUp/";
  36. public static string BgMd5FileSaveName = "BgMd5";
  37. private static string[] CardBgSrcPaths = new string[] { "../../../gfg/正式资源/卡牌/pic/" };
  38. public static string CardBgTargetPath = $"{ResPathUtil.TEXTURE_DIR_PATH}/Card/Bg/";
  39. public static string CardBgMd5FileSaveName = "CardBgMd5";
  40. private static string[] CardIconSrcPaths = new string[] { "../../../gfg/正式资源/卡牌/icon/" };
  41. public static string CardIconTargetPath = $"{ResPathUtil.TEXTURE_DIR_PATH}/Card/Card/";
  42. public static string CardMd5FileSaveName = "CardMd5";
  43. public static string[] DressUpAnimationSrcPaths = new string[] { $"../../../gfg/ArtProject/{ResPathUtil.ANIMATION_DIR_PATH}/" };
  44. public static string DressUpAnimationTargetPath = $"{ResPathUtil.ANIMATION_DIR_PATH}/";
  45. public static string[] EffectSrcPaths = new string[] { $"../../../gfg/ArtProject/{ResPathUtil.EFFECT_DIR_PATH}/" };
  46. public static string EffectTargetPath = $"{ResPathUtil.EFFECT_DIR_PATH}/";
  47. public static string[] MaterialSrcPaths = new string[] { $"../../../gfg/ArtProject/{ResPathUtil.Material_DIR_PATH}/" };
  48. public static string MaterialTargetPath = $"{ResPathUtil.Material_DIR_PATH}/";
  49. public static string[] TextureSrcPaths = new string[] { $"../../../gfg/ArtProject/{ResPathUtil.Texture_DIR_PATH}/" };
  50. public static string TextureTargetPath = $"{ResPathUtil.Texture_DIR_PATH}/";
  51. public static void Import()
  52. {
  53. //音乐
  54. EditorUtility.DisplayProgressBar("进度", "正在导入音乐", 1);
  55. ImportRes(MusicSrcPaths, MusicTargetPath, MusicMd5FileSaveName);
  56. //图鉴图标
  57. EditorUtility.DisplayProgressBar("进度", "正在导入图鉴图标", 1);
  58. ImportRes(FieldGuideIconSrcPaths, FieldGuideIconTargetPath, FieldGuideIconMd5FileSaveName);
  59. //物品图标
  60. EditorUtility.DisplayProgressBar("进度", "正在导入物品图标", 1);
  61. ImportRes(ItemIconSrcPaths, ItemIconTargetPath, IconMd5FileSaveName);
  62. // 换装部件
  63. EditorUtility.DisplayProgressBar("进度", "正在裁减换装部件", 1);
  64. ImportClipImage();
  65. //NPC头像
  66. EditorUtility.DisplayProgressBar("进度", "正在导入NPC头像", 1);
  67. ImportRes(NpcHeadSrcPaths, NpcHeadTargetPath, HeadMd5FileSaveName);
  68. //背景
  69. EditorUtility.DisplayProgressBar("进度", "正在导入背景图", 1);
  70. ImportRes(BgSrcPaths, BgTargetPath, BgMd5FileSaveName);
  71. //卡牌背景
  72. EditorUtility.DisplayProgressBar("进度", "正在导入卡牌背景", 1);
  73. ImportRes(CardBgSrcPaths, CardBgTargetPath, CardBgMd5FileSaveName);
  74. //卡牌icon
  75. EditorUtility.DisplayProgressBar("进度", "正在导入卡牌图标", 1);
  76. ImportRes(CardIconSrcPaths, CardIconTargetPath, CardMd5FileSaveName);
  77. //动画
  78. EditorUtility.DisplayProgressBar("进度", "正在导入动作动画", 1);
  79. ImportFileAndDir(DressUpAnimationSrcPaths, DressUpAnimationTargetPath, new string[] { ".moc3" });
  80. //特效
  81. EditorUtility.DisplayProgressBar("进度", "正在导入特效动画", 1);
  82. ImportFileAndDir(EffectSrcPaths, EffectTargetPath);
  83. //材质
  84. EditorUtility.DisplayProgressBar("进度", "正在导入特效材质", 1);
  85. ImportFileAndDir(MaterialSrcPaths, MaterialTargetPath);
  86. //图片
  87. EditorUtility.DisplayProgressBar("进度", "正在导入特效图片", 1);
  88. ImportFileAndDir(TextureSrcPaths, TextureTargetPath);
  89. //NPC对话立绘
  90. EditorUtility.DisplayProgressBar("进度", "正在导入NPC对话立绘", 1);
  91. List<string> files = ImportRes(NpcPicSSrcPaths, NpcPicSTargetPath, PicSMd5FileSaveName);
  92. //NPC对战立绘
  93. EditorUtility.DisplayProgressBar("进度", "正在导入NPC对战立绘", 1);
  94. files = ImportRes(NpcPicSrcPaths, NpcPicTargetPath, PicFMd5FileSaveName);
  95. if (files != null && files.Count > 0)
  96. {
  97. EditorUtility.DisplayDialog("提示", "有NPC立绘更新,需要设置坐标原点!", "OK", "");
  98. }
  99. EditorUtility.ClearProgressBar();
  100. AssetDatabase.Refresh();
  101. Debug.LogWarning("导入美术资源成功!");
  102. }
  103. public static List<string> ImportRes(string[] sourceDirs, string targetDir, string saveName)
  104. {
  105. List<string> files = null;
  106. if (!Directory.Exists(targetDir))
  107. {
  108. Directory.CreateDirectory(targetDir);
  109. }
  110. foreach (string dir in sourceDirs)
  111. {
  112. files = FileUtil.CopyFilesTo(dir, targetDir, saveName, new string[] { ".png", ".jpg", ".mp3" }, ragule);
  113. foreach (var file in files)
  114. {
  115. Debug.LogFormat("更新{0}", file);
  116. }
  117. }
  118. return files;
  119. }
  120. public static void ImportClipImage()
  121. {
  122. ImportClip(DressUpSrcPaths, DressUpTargetPath);
  123. }
  124. public static void ImportClip(string[] sourceDirs, string targetDir)
  125. {
  126. //换装部件
  127. if (!Directory.Exists(targetDir))
  128. {
  129. Directory.CreateDirectory(targetDir);
  130. }
  131. Dictionary<string, string> sourceImageMD5 = new Dictionary<string, string>();
  132. sourceImageMD5 = ImagesClip.ReadSourceImagesMD5(DressUpMd5FileSaveName);
  133. foreach (string dir in sourceDirs)
  134. {
  135. GFGEditor.FileUtil.ForeachFileInDir(dir, null, (string file) =>
  136. {
  137. string fileName = Path.GetFileName(file);
  138. if (fileName == "saveMD5" || !FileUtil.CheckStringByRegular(fileName, ragule))
  139. {
  140. return;
  141. }
  142. if (!File.Exists(targetDir + fileName) || !sourceImageMD5.ContainsKey(file) || sourceImageMD5[file] != FileUtil.md5file(file))
  143. {
  144. sourceImageMD5[file] = FileUtil.md5file(file);
  145. ImagesClip.CutImageWhitePart(file, targetDir, fileName);
  146. }
  147. });
  148. }
  149. ImagesClip.WriteSourceImagesMD5(sourceImageMD5, DressUpMd5FileSaveName);
  150. AssetDatabase.Refresh();
  151. }
  152. public static List<string> ImportFileAndDir(string[] sourceDirs, string targetDir, string[] excludeExtentions = null)
  153. {
  154. List<string> files = null;
  155. if (!Directory.Exists(targetDir))
  156. {
  157. Directory.CreateDirectory(targetDir);
  158. }
  159. foreach (string dir in sourceDirs)
  160. {
  161. files = FileUtil.CopyDirsAndFilesInSubDirTo(dir, targetDir, excludeExtentions, ragule);
  162. foreach (var file in files)
  163. {
  164. Debug.LogFormat("更新{0}", file);
  165. }
  166. }
  167. return files;
  168. }
  169. }
  170. }