using UnityEditor; using UnityEngine; using System.IO; using System; using System.Collections.Generic; using ET; using GFGGame; namespace GFGEditor { public class ImportArtResTool { public static string ResRootDirName = "正式资源"; public static string ResRootDirNameDressUp = "正式资源"; public static string ResRootPath { get { return $"../../0A-GFGClient/{ResRootDirName}/"; } } public static string ResRootPathDressUp { get { return $"../../0A-GFGClient/{ResRootDirNameDressUp}/"; } } public static string ragule = @"^[0-9a-zA-Z_.]{1,}$"; public static string Md5FilePath = $"{ResPathUtil.RES_ROOT_DIR_PATH}/MD5"; private static string[] FieldGuideIconSrcPaths { get { return new string[] { ResRootPath + "图鉴/套装图鉴" }; } } public static string FieldGuideIconTargetPath = $"{ResPathUtil.TEXTURE_DIR_PATH}/FieldGuide/SuitIcon/"; public static string FieldGuideIconMd5FileSaveName = "FieldGuideIconMd5"; private static string[] ChapterGuideIconSrcPaths { get { return new string[] { ResRootPath + "图鉴/博物图鉴" }; } } public static string ChapterGuideIconTargetPath = $"{ResPathUtil.TEXTURE_DIR_PATH}/FieldGuide/ChapterIcon/"; public static string ChapterGuideIconMd5FileSaveName = "ChapterGuideIconMd5"; private static string[] StoryGuideIconSrcPaths { get { return new string[] { ResRootPath + "图鉴/故事图鉴" }; } } public static string StoryGuideIconTargetPath = $"{ResPathUtil.TEXTURE_DIR_PATH}/FieldGuide/ChapterIcon/"; public static string StoryGuideIconMd5FileSaveName = "StoryGuideIconMd5"; private static string[] MusicSrcPaths { get { return new string[] { ResRootPath + "music/" }; } } public static string MusicTargetPath = $"{ResPathUtil.MUSIC_DIR_PATH}/"; public static string MusicMd5FileSaveName = "MusicMd5"; private static string[] VoiceSrcPaths { get { return new string[] { ResRootPath + "voice/" }; } } public static string VoiceTargetPath = $"{ResPathUtil.Voice_DIR_PATH}/"; public static string VoiceMd5FileSaveName = "VoiceMd5"; private static string[] VideoSrcPaths { get { return new string[] { ResRootPath + "video/" }; } } public static string VideoTargetPath = $"{ResPathUtil.Voice_DIR_PATH}/"; public static string VideoMd5FileSaveName = "VideoMd5"; private static string[] CardMusicSrcPaths { get { return new string[] { ResRootPath + "cardMusic/Card/" }; } } public static string CardMusicTargetPath = $"{ResPathUtil.SOUND_DIR_PATH}/Card/"; public static string CardMusicMd5FileSaveName = "CardMusicMd5"; private static string[] ItemIconSrcPaths { get { return new string[] { ResRootPath + "icon/" }; } } public static string ItemIconTargetPath = $"{ResPathUtil.TEXTURE_DIR_PATH}/Icon/"; public static string IconMd5FileSaveName = "IconMd5"; private static string[] DressUpSrcPaths { get { return new string[] { ResRootPathDressUp + "suit/" }; } } public static string DressUpTargetPath = $"{ResPathUtil.TEXTURE_DIR_PATH}/DressUp/"; public static string DressUpMd5FileSaveName = "DressUpMd5"; private static string[] NpcFaceSrcPaths { get { return new string[] { ResRootPath + "npc/对话表情/" }; } } public static string NpcFaceTargetPath = $"{ResPathUtil.TEXTURE_DIR_PATH}/Npc/Face/"; public static string NpcFacepMd5FileSaveName = "NpcFaceMd5"; private static string[] NpcHeadSrcPaths { get { return new string[] { ResRootPath + "npc/对战头像/" }; } } public static string NpcHeadTargetPath = $"{ResPathUtil.TEXTURE_DIR_PATH}/Npc/Head/"; public static string NPCHeadMd5FileSaveName = "NpcHeadMd5"; private static string[] NpcPicSrcPaths { get { return new string[] { ResRootPath + "npc/对战立绘/" }; } } public static string NpcPicTargetPath = $"{ResPathUtil.TEXTURE_DIR_PATH}/Npc/PicF/"; public static string PicFMd5FileSaveName = "PicFMd5"; private static string[] NpcPicSSrcPaths { get { return new string[] { ResRootPath + "npc/对话立绘/" }; } } public static string NpcPicSTargetPath = $"{ResPathUtil.TEXTURE_DIR_PATH}/Npc/PicS/"; public static string PicSMd5FileSaveName = "PicSMd5"; public static string[] BgSrcPaths { get { return new string[] { ResRootPath + "scene/" }; } } public static string BgTargetPath = $"{ResPathUtil.TEXTURE_DIR_PATH}/SceneBg/"; public static string BgMd5FileSaveName = "BgMd5"; private static string[] CardBgSrcPaths { get { return new string[] { ResRootPath + "卡牌/pic/" }; } } public static string CardBgTargetPath = $"{ResPathUtil.TEXTURE_DIR_PATH}/Card/Bg/"; public static string CardBgMd5FileSaveName = "CardBgMd5"; private static string[] CardIconSrcPaths { get { return new string[] { ResRootPath + "卡牌/icon/" }; } } public static string CardIconTargetPath = $"{ResPathUtil.TEXTURE_DIR_PATH}/Card/Card/"; public static string CardMd5FileSaveName = "CardMd5"; private static string[] CardSkillSrcPaths { get { return new string[] { ResRootPath + "卡牌/skill/" }; } } public static string CardSkillTargetPath = $"{ResPathUtil.TEXTURE_DIR_PATH}/Card/Skill/"; public static string CardSkillMd5FileSaveName = "CardSkillMd5"; private static string[] ActivitySrcPaths { get { return new string[] { ResRootPath + "activity/activity/" }; } } public static string ActivityTargetPath = $"{ResPathUtil.TEXTURE_DIR_PATH}/Activity/Activity/"; public static string ActivityMd5FileSaveName = "ActivityMd5"; private static string[] ActivityShow1SrcPaths { get { return new string[] { ResRootPath + "activity/show1/" }; } } public static string ActivityShow1TargetPath = $"{ResPathUtil.TEXTURE_DIR_PATH}/Activity/Show1/"; public static string ActivityShow1Md5FileSaveName = "ActivityShow1Md5"; private static string[] PhotoGraphBorderPaths { get { return new string[] { ResRootPath + "边框/" }; } } public static string PhotoGraphBorderTargetPath = $"{ResPathUtil.TEXTURE_DIR_PATH}/Photograph/border/"; public static string PhotoGraphBorderMd5FileSaveName = "PhotoGraphBorderMd5"; private static string[] UIBgSrcPaths { get { return new string[] { ResRootPath + "UI背景/" }; } } public static string UIBgTargetPath = $"{ResPathUtil.TEXTURE_DIR_PATH}/BgImg/"; public static string UIBgMd5FileSaveName = "UIBgMd5"; private static string[] ActivityShow2SrcPaths { get { return new string[] { ResRootPath + "activity/show2/" }; } } public static string ActivityShow2TargetPath = $"{ResPathUtil.TEXTURE_DIR_PATH}/Activity/Show2/"; public static string ActivityShow2Md5FileSaveName = "ActivityShow2Md5"; public static string[] DressUpAnimationSrcPaths { get { return new string[] { ResRootPathDressUp + $"ArtProject/{ResPathUtil.ANIMATION_DIR_PATH}/" }; } } public static string DressUpAnimationTargetPath = $"{ResPathUtil.ANIMATION_DIR_PATH}/"; public static string[] EffectSrcPaths { get { return new string[] { ResRootPath + $"ArtProject/{ResPathUtil.EFFECT_DIR_PATH}/" }; } } public static string EffectTargetPath = $"{ResPathUtil.EFFECT_DIR_PATH}/"; public static string[] MaterialSrcPaths { get { return new string[] { ResRootPath + $"ArtProject/{ResPathUtil.Material_DIR_PATH}/Effect/" }; } } public static string MaterialTargetPath = $"{ResPathUtil.Material_DIR_PATH}/Effect/"; public static string EffectMaterialMd5FileSaveName = "EffectMaterialMd5"; public static string[] ShaderSrcPaths { get { return new string[] { ResRootPath + $"ArtProject/{ResPathUtil.Shader_DIR_PATH}/" }; } } public static string ShaderTargetPath = $"{ResPathUtil.Shader_DIR_PATH}/"; public static string ShaderMd5FileSaveName = "ShaderMd5"; public static string[] ModelSrcPaths { get { return new string[] { ResRootPath + $"ArtProject/{ResPathUtil.Model_DIR_PATH}/" }; } } public static string ModelTargetPath = $"{ResPathUtil.Model_DIR_PATH}/"; public static string ModelMd5FileSaveName = "ModelMd5"; public static string[] TextureSrcPaths { get { return new string[] { ResRootPath + $"ArtProject/{ResPathUtil.TEXTURE_DIR_PATH}/Effect/" }; } } public static string TextureTargetPath = $"{ResPathUtil.TEXTURE_DIR_PATH}/Effect/"; public static string EffectTextureMd5FileSaveName = "EffectTextureMd5"; private static string[] TravelBgPaths { get { return new string[] { ResRootPath + "千山万水/背景/" }; } } public static string TravelBgTargetPath = $"{ResPathUtil.TEXTURE_DIR_PATH}/Travel/Bg/"; public static string TravelBgMd5FileSaveName = "TravelBgMd5"; private static string[] TravelRolePaths { get { return new string[] { ResRootPath + "千山万水/角色/" }; } } public static string TravelRoleTargetPath = $"{ResPathUtil.TEXTURE_DIR_PATH}/Travel/Role/"; public static string TravelRoleMd5FileSaveName = "TravelRoleMd5"; private static string[] HeadPaths { get { return new string[] { ResRootPath + "头像/头像/" }; } } public static string HeadTargetPath = $"{ResPathUtil.TEXTURE_DIR_PATH}/Head/Head/"; public static string HeadMd5FileSaveName = "HeadMd5"; private static string[] HeadBorderPaths { get { return new string[] { ResRootPath + "头像/头像框/" }; } } public static string HeadBorderTargetPath = $"{ResPathUtil.TEXTURE_DIR_PATH}/Head/HeadBorder/"; public static string HeadBorderMd5FileSaveName = "HeadBorderMd5"; private static string[] LeagueIconPaths { get { return new string[] { ResRootPath + "联盟徽章/" }; } } public static string LeagueIconTargetPath = $"{ResPathUtil.TEXTURE_DIR_PATH}/LeagueIcon/"; public static string LeagueIconMd5FileSaveName = "LeagueIconMd5"; public static string[] MiniGameFlipPaths { get { return new string[] { ResRootPath + "MiniGame/FlipGame/" }; } } public static string MiniGameFlipTargetPath = $"{ResPathUtil.TEXTURE_DIR_PATH}/MiniGame/FlipGame/"; public static string MiniGameFlipMd5FileSaveName = "MiniGameFlipMd5"; public static string[] MiniGameHRDPaths { get { return new string[] { ResRootPath + "MiniGame/HRDGame/" }; } } public static string MiniGameHRDTargetPath = $"{ResPathUtil.TEXTURE_DIR_PATH}/MiniGame/HRDGame/"; public static string MiniGameHRDMd5FileSaveName = "MiniGameHRDMd5"; public static string[] MiniGameTZFEPaths { get { return new string[] { ResRootPath + "MiniGame/TZFEGame/" }; } } public static string MiniGameTZFETargetPath = $"{ResPathUtil.TEXTURE_DIR_PATH}/MiniGame/TZFEGame/"; public static string MiniGameTZFEMd5FileSaveName = "MiniGameTZFEMd5"; public static string[] MiniGameMergePaths { get { return new string[] { ResRootPath + "MiniGame/MergeGame/" }; } } public static string MiniGameMergeTargetPath = $"{ResPathUtil.TEXTURE_DIR_PATH}/MiniGame/MergeGame/"; public static string MiniGameMergeMd5FileSaveName = "MiniGameMergeMd5"; public static string[] LuckyBoxTitleImgPaths { get { return new string[] { ResRootPath + "UI/LuckyBoxTitleImg/" }; } } public static string LuckyBoxTitleImgTargetPath = $"{ResPathUtil.TEXTURE_DIR_PATH}/LuckyBoxTitleImg/"; public static string LuckyBoxTitleImgMd5FileSaveName = "LuckyBoxTitleImgMd5"; public static void Test() { ImportClip(NpcFaceSrcPaths, NpcFaceTargetPath, NpcFacepMd5FileSaveName); } public static void Import() { var md5Path = ImportArtResTool.Md5FilePath; if (!Directory.Exists(md5Path)) { Directory.CreateDirectory(md5Path); } //音乐 EditorUtility.DisplayProgressBar("进度", "正在导入音乐", 1); ImportRes(MusicSrcPaths, MusicTargetPath, MusicMd5FileSaveName); //语音 EditorUtility.DisplayProgressBar("进度", "正在导入语音", 1); ImportRes(VoiceSrcPaths, VoiceTargetPath, VoiceMd5FileSaveName); //视频 EditorUtility.DisplayProgressBar("进度", "正在导入视频", 1); ImportRes(VideoSrcPaths, VideoTargetPath, VideoMd5FileSaveName); //词牌音乐 EditorUtility.DisplayProgressBar("进度", "正在导入词牌音乐", 1); ImportRes(CardMusicSrcPaths, CardMusicTargetPath, CardMusicMd5FileSaveName); //套装图鉴图标 EditorUtility.DisplayProgressBar("进度", "正在导入图鉴图标", 1); ImportRes(FieldGuideIconSrcPaths, FieldGuideIconTargetPath, FieldGuideIconMd5FileSaveName); //博物图鉴图标 EditorUtility.DisplayProgressBar("进度", "正在导入博物图鉴图标", 1); ImportRes(ChapterGuideIconSrcPaths, ChapterGuideIconTargetPath, ChapterGuideIconMd5FileSaveName); //故事图鉴图标 EditorUtility.DisplayProgressBar("进度", "正在导入故事图鉴图标", 1); ImportRes(StoryGuideIconSrcPaths, StoryGuideIconTargetPath, StoryGuideIconMd5FileSaveName); //物品图标 EditorUtility.DisplayProgressBar("进度", "正在导入物品图标", 1); ImportRes(ItemIconSrcPaths, ItemIconTargetPath, IconMd5FileSaveName); // 换装部件 EditorUtility.DisplayProgressBar("进度", "正在裁减换装部件", 1); ImportClip(DressUpSrcPaths, DressUpTargetPath, DressUpMd5FileSaveName); // NPC对话表情 EditorUtility.DisplayProgressBar("进度", "正在裁减NPC对话表情", 1); ImportClip(NpcFaceSrcPaths, NpcFaceTargetPath, NpcFacepMd5FileSaveName); //NPC头像 EditorUtility.DisplayProgressBar("进度", "正在导入NPC头像", 1); ImportRes(NpcHeadSrcPaths, NpcHeadTargetPath, NPCHeadMd5FileSaveName); //背景 EditorUtility.DisplayProgressBar("进度", "正在导入背景图", 1); ImportRes(BgSrcPaths, BgTargetPath, BgMd5FileSaveName); //词牌背景 EditorUtility.DisplayProgressBar("进度", "正在导入词牌背景", 1); ImportRes(CardBgSrcPaths, CardBgTargetPath, CardBgMd5FileSaveName); //词牌icon EditorUtility.DisplayProgressBar("进度", "正在导入词牌图标", 1); ImportRes(CardIconSrcPaths, CardIconTargetPath, CardMd5FileSaveName); //词牌技能图标 EditorUtility.DisplayProgressBar("进度", "正在导入词牌技能图标", 1); ImportRes(CardSkillSrcPaths, CardSkillTargetPath, CardSkillMd5FileSaveName); //活动宣传图 EditorUtility.DisplayProgressBar("进度", "正在导入活动宣传图", 1); ImportRes(ActivitySrcPaths, ActivityTargetPath, ActivityMd5FileSaveName); //活动展示图1 EditorUtility.DisplayProgressBar("进度", "正在导入活动展示图1", 1); ImportRes(ActivityShow1SrcPaths, ActivityShow1TargetPath, ActivityShow1Md5FileSaveName); //活动展示图2 EditorUtility.DisplayProgressBar("进度", "正在导入活动展示图2", 1); ImportRes(ActivityShow2SrcPaths, ActivityShow2TargetPath, ActivityShow2Md5FileSaveName); //拍照边框 EditorUtility.DisplayProgressBar("进度", "正在导入词牌图标", 1); ImportRes(PhotoGraphBorderPaths, PhotoGraphBorderTargetPath, PhotoGraphBorderMd5FileSaveName); //UI背景 EditorUtility.DisplayProgressBar("进度", "正在导入UI背景", 1); ImportRes(UIBgSrcPaths, UIBgTargetPath, UIBgMd5FileSaveName); EditorUtility.DisplayProgressBar("进度", "正在导入千山万水背景", 1); ImportRes(TravelBgPaths, TravelBgTargetPath, TravelBgMd5FileSaveName); EditorUtility.DisplayProgressBar("进度", "正在导入千山万水角色资源", 1); ImportRes(TravelRolePaths, TravelRoleTargetPath, TravelRoleMd5FileSaveName); EditorUtility.DisplayProgressBar("进度", "正在导入玩家头像资源", 1); ImportRes(HeadPaths, HeadTargetPath, HeadMd5FileSaveName); EditorUtility.DisplayProgressBar("进度", "正在导入玩家头像框资源", 1); ImportRes(HeadBorderPaths, HeadBorderTargetPath, HeadBorderMd5FileSaveName); EditorUtility.DisplayProgressBar("进度", "正在导入联盟徽章资源", 1); ImportRes(LeagueIconPaths, LeagueIconTargetPath, LeagueIconMd5FileSaveName); //清除冗余动画 FileUtil.DeleteUnnecessaryAnimation(ImportArtResTool.DressUpAnimationTargetPath, ImportArtResTool.DressUpAnimationSrcPaths[0]); FileUtil.DeleteUnnecessaryAnimation(ImportArtResTool.EffectTargetPath, ImportArtResTool.EffectSrcPaths[0]); //动画 EditorUtility.DisplayProgressBar("进度", "正在导入动作动画", 1); ImportFileAndDir(DressUpAnimationSrcPaths, DressUpAnimationTargetPath, new string[] { ".moc3" }); //特效 EditorUtility.DisplayProgressBar("进度", "正在导入特效动画", 1); ImportFileAndDir(EffectSrcPaths, EffectTargetPath); //材质 EditorUtility.DisplayProgressBar("进度", "正在导入特效材质", 1); ImportRes(MaterialSrcPaths, MaterialTargetPath, EffectMaterialMd5FileSaveName); //Shader EditorUtility.DisplayProgressBar("进度", "正在导入Shader", 1); ImportRes(ShaderSrcPaths, ShaderTargetPath, ShaderMd5FileSaveName); //model EditorUtility.DisplayProgressBar("进度", "正在导入Mhader", 1); ImportRes(ModelSrcPaths, ModelTargetPath, ModelMd5FileSaveName); //图片 EditorUtility.DisplayProgressBar("进度", "正在导入特效图片", 1); ImportRes(TextureSrcPaths, TextureTargetPath, EffectTextureMd5FileSaveName); //NPC对话立绘 EditorUtility.DisplayProgressBar("进度", "正在导入NPC对话立绘", 1); List files = ImportRes(NpcPicSSrcPaths, NpcPicSTargetPath, PicSMd5FileSaveName); //NPC对战立绘 EditorUtility.DisplayProgressBar("进度", "正在导入NPC对战立绘", 1); files = ImportRes(NpcPicSrcPaths, NpcPicTargetPath, PicFMd5FileSaveName); if (files != null && files.Count > 0) { EditorUtility.DisplayDialog("提示", "有NPC立绘更新,需要设置坐标原点!", "OK", ""); } //小游戏资源 EditorUtility.DisplayProgressBar("进度", "正在导入小游戏资源", 1); ImportRes(MiniGameFlipPaths, MiniGameFlipTargetPath, MiniGameFlipMd5FileSaveName); EditorUtility.DisplayProgressBar("进度", "正在导入小游戏资源", 1); ImportRes(MiniGameHRDPaths, MiniGameHRDTargetPath, MiniGameHRDMd5FileSaveName); EditorUtility.DisplayProgressBar("进度", "正在导入小游戏资源", 1); ImportRes(MiniGameTZFEPaths, MiniGameTZFETargetPath, MiniGameTZFEMd5FileSaveName); EditorUtility.DisplayProgressBar("进度", "正在导入小游戏资源", 1); ImportRes(MiniGameMergePaths, MiniGameMergeTargetPath, MiniGameMergeMd5FileSaveName); //摘星标题资源 EditorUtility.DisplayProgressBar("进度", "正在导入摘星标题资源", 1); ImportRes(LuckyBoxTitleImgPaths, LuckyBoxTitleImgTargetPath, LuckyBoxTitleImgMd5FileSaveName); EditorUtility.ClearProgressBar(); AssetDatabase.Refresh(); Debug.LogWarning("导入美术资源成功!"); } public static List ImportRes(string[] sourceDirs, string targetDir, string saveName) { List files = null; if (!Directory.Exists(targetDir)) { Directory.CreateDirectory(targetDir); } foreach (string dir in sourceDirs) { files = FileUtil.CopyFilesTo(dir, targetDir, saveName, new string[] { ".png", ".jpg", ".mp3", ".wav", ".meta", ".mat", ".shader", ".tga", ".FBX"}, ragule); foreach (var file in files) { Debug.LogFormat("更新{0}", file); } } return files; } public static void ImportClip(string[] sourceDirs, string targetDir, string md5FileName) { //换装部件 if (!Directory.Exists(targetDir)) { Directory.CreateDirectory(targetDir); } Dictionary sourceImageMD5 = new Dictionary(); sourceImageMD5 = ImagesClip.ReadSourceImagesMD5(md5FileName); foreach (string dir in sourceDirs) { GFGEditor.FileUtil.ForeachFileInDir(dir, null, (string file) => { Log.Debug(file); string fileName = Path.GetFileName(file); if (fileName == "saveMD5" || !FileUtil.CheckStringByRegular(fileName, ragule)) { return; } if (!File.Exists(targetDir + fileName) || !sourceImageMD5.ContainsKey(file) || sourceImageMD5[file] != FileUtil.md5file(file)) { sourceImageMD5[file] = FileUtil.md5file(file); ImagesClip.CutImageWhitePart(file, targetDir, fileName); } }); } ImagesClip.WriteSourceImagesMD5(sourceImageMD5, md5FileName); AssetDatabase.Refresh(); } public static List ImportFileAndDir(string[] sourceDirs, string targetDir, string[] excludeExtentions = null) { List files = null; if (!Directory.Exists(targetDir)) { Directory.CreateDirectory(targetDir); } foreach (string dir in sourceDirs) { files = FileUtil.CopyDirsAndFilesInSubDirTo(dir, targetDir, excludeExtentions, ragule); foreach (var file in files) { Debug.LogFormat("更新{0}", file); } } return files; } } }