| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359 | using UnityEditor;using UnityEngine;using System.IO;using System;using System.Collections.Generic;using GFGGame;namespace GFGEditor{    public class ImportArtResTool    {        public static string ResRootDirName = "正式资源";        public static string ResRootDirNameDressUp = "正式资源";        public static string ResRootPath { get { return $"../../../gfg/{ResRootDirName}/"; } }        public static string ResRootPathDressUp { get { return $"../../../gfg/{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[] 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[] 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[] 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 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(CardMusicSrcPaths, CardMusicTargetPath, CardMusicMd5FileSaveName);            //套装图鉴图标            EditorUtility.DisplayProgressBar("进度", "正在导入图鉴图标", 1);            ImportRes(FieldGuideIconSrcPaths, FieldGuideIconTargetPath, FieldGuideIconMd5FileSaveName);            //博物图鉴图标            EditorUtility.DisplayProgressBar("进度", "正在导入博物图鉴图标", 1);            ImportRes(ChapterGuideIconSrcPaths, ChapterGuideIconTargetPath, ChapterGuideIconMd5FileSaveName);            //物品图标            EditorUtility.DisplayProgressBar("进度", "正在导入物品图标", 1);            ImportRes(ItemIconSrcPaths, ItemIconTargetPath, IconMd5FileSaveName);            // 换装部件            EditorUtility.DisplayProgressBar("进度", "正在裁减换装部件", 1);            ImportClipImage();            //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<string> 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.ClearProgressBar();            AssetDatabase.Refresh();            Debug.LogWarning("导入美术资源成功!");        }        public static List<string> ImportRes(string[] sourceDirs, string targetDir, string saveName)        {            List<string> 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 ImportClipImage()        {            ImportClip(DressUpSrcPaths, DressUpTargetPath);        }        public static void ImportClip(string[] sourceDirs, string targetDir)        {            //换装部件            if (!Directory.Exists(targetDir))            {                Directory.CreateDirectory(targetDir);            }            Dictionary<string, string> sourceImageMD5 = new Dictionary<string, string>();            sourceImageMD5 = ImagesClip.ReadSourceImagesMD5(DressUpMd5FileSaveName);            foreach (string dir in sourceDirs)            {                GFGEditor.FileUtil.ForeachFileInDir(dir, null, (string 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, DressUpMd5FileSaveName);            AssetDatabase.Refresh();        }        public static List<string> ImportFileAndDir(string[] sourceDirs, string targetDir, string[] excludeExtentions = null)        {            List<string> 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;        }    }}
 |