unity资源管理工具若干
来源:互联网 发布:mac装win10多少钱 编辑:程序博客网 时间:2024/06/06 14:01
1.当制作小怪状态机时,小怪的动作数量和名称几乎相同,只需要制作一个状态机,然后复制改名称,利用脚本替换状态机中的动画为当前文件夹下同名的动画。
[MenuItem("Assets/替换为当前文件夹的动画")] public static void ReplaceAnimatorClips() { Object animObj= Selection.activeObject; AnimatorController animator = animObj as AnimatorController; string folderpath = Path.GetDirectoryName(AssetDatabase.GetAssetPath(animObj)); GetAllFiles(folderpath); if (files.Count <= 0) return; animationClips.Clear(); for (int i = 0; i < files.Count; i++) { string name = Path.GetFileNameWithoutExtension(files[i]); string[] names = name.Split('@'); if (names.Length == 2) { string clipname = names[1]; animationClips[clipname.ToLower()] = files[i]; } } ChildAnimatorState[] childstates = animator.layers[0].stateMachine.states; foreach (var childstate in childstates) { AnimatorState state = childstate.state; Motion mo = state.motion; if (mo == null) { Debug.LogError(state.name + "节点动作是空"); continue; } if (mo.GetType().Equals(typeof(BlendTree))) { BlendTree tree = (BlendTree)mo; ReplaceMotionInLocalFolder(tree); } else { ReplaceMotionInLocalFolder(state); } } AssetDatabase.SaveAssets(); } static Dictionary<string, string> animationClips = new Dictionary<string, string>(); public static Motion GetLocalMotionFile(string name) { if (animationClips.ContainsKey(name.ToLower())) { AnimationClip mo = AssetDatabase.LoadAssetAtPath(animationClips[name.ToLower()], typeof(AnimationClip)) as AnimationClip; if (mo != null) { return mo; } else { Debug.LogWarning("no this name clip in this folder" + name); } } else { Debug.LogWarning("no this name clip in this folder" + name); } return null; } public static void ReplaceMotionInLocalFolder(BlendTree blendtree) { Dictionary<int, string> orderRecord = new Dictionary<int, string>(); Dictionary<string, Motion> motionRecord = new Dictionary<string, Motion>(); for (int i = 0; i < blendtree.children.Length; i++) { string name = blendtree.children[i].motion.name; orderRecord[i] = name; } for (int i = 0; i < blendtree.children.Length; i++) { string name = blendtree.children[i].motion.name; Motion oldmo = blendtree.children[i].motion; if (GetLocalMotionFile(name) != null) { Motion newmo = GetLocalMotionFile(name); if (blendtree.children[i].motion != newmo) { motionRecord[name] = newmo; } else { motionRecord[name] = oldmo; } } else { motionRecord[name] = oldmo; } } for (int i = blendtree.children.Length - 1; i >= 0; i--) { blendtree.RemoveChild(i); } for (int i = 0; i < orderRecord.Count; i++) { if (!motionRecord.ContainsKey(orderRecord[i])) { Debug.LogError("index " + i + "has no motion"); } else { blendtree.AddChild(motionRecord[orderRecord[i]]); } } blendtree.useAutomaticThresholds = true; } public static void ReplaceMotionInLocalFolder(AnimatorState state) { string name = state.motion.name; if (GetLocalMotionFile(name) != null) { state.motion = GetLocalMotionFile(name); } } //存在当前文件夹下所有的对应后缀的子物体。 static List<string> files = new List<string>(1000); public static void GetAllFiles(string path) { files.Clear(); CollectAllFiles(path); } public static void CollectAllFiles(string path) { string[] localfiles = Directory.GetFiles(path); string[] dirs = Directory.GetDirectories(path); for (int i = 0; i < localfiles.Length; i++) { string filepath = localfiles[i]; if (filepath.Contains(".meta")) continue; files.Add(filepath); } for (int j = 0; j < dirs.Length; j++) { CollectAllFiles(dirs[j]); } }
2.显示文件的相对路径
[MenuItem("Assets/显示路径")] public static void ShowPath() { Object animObj = Selection.activeObject; string path = AssetDatabase.GetAssetPath(animObj); AnimationClip clip = AssetDatabase.LoadAssetAtPath(path,typeof(AnimationClip)) as AnimationClip; if (clip != null) { Debug.LogError("get"); } Debug.LogError(path); }3.批量修改文件夹内图片格式
[MenuItem("Assets/修改文件夹内的图片格式")] static void EditorTextureInFolder() { Object fold = Selection.activeObject; string relatepath = AssetDatabase.GetAssetPath(fold); string folderpath = Path.GetFullPath(relatepath); GetAllFiles(folderpath.Replace("\\","/").Replace(Application.dataPath, "Assets")); for (int i = 0; i < files.Count; i++) { if (Path.GetExtension(files[i]).Equals(".png") || Path.GetExtension(files[i]).Equals(".jpg") || Path.GetExtension(files[i]).Equals(".tga")) { EditTexture(AssetDatabase.LoadAssetAtPath(files[i],typeof(Texture)) as Texture); } } } static void EditTexture(Object targetObj) { if (targetObj && targetObj is Texture) { string path = AssetDatabase.GetAssetPath(targetObj); TextureImporter texture = AssetImporter.GetAtPath(path) as TextureImporter; texture.textureType = TextureImporterType.Advanced; texture.filterMode = FilterMode.Bilinear; texture.mipmapEnabled = true; texture.wrapMode = TextureWrapMode.Clamp; texture.spriteImportMode = SpriteImportMode.None; texture.textureFormat = TextureImporterFormat.AutomaticCompressed; AssetDatabase.ImportAsset(path); } }
0 0
- unity资源管理工具若干
- unity资源管理
- Unity 资源管理
- Unity--资源管理
- Unity运行时刻资源管理
- Unity运行时刻资源管理
- 【unity资源管理】 打包
- 【unity资源管理】 开篇
- 【unity资源管理】内存池
- unity AssetBundle的资源管理
- Unity资源管理汇总
- Unity之AssetBundle资源管理
- Unity之 - 资源管理
- Unity 资源管理 AssetBundle
- Unity 资源管理插件
- 深挖unity的资源管理
- Unity资源管理规范
- unity 基础之文件资源管理
- Qt:QSound无法播放.wav声音的解决办法
- 前端技术学习之选择器(八)
- Android之Html将网络图片替换为本地图片
- Thrift 介绍及java实例
- Centos7下配置网络
- unity资源管理工具若干
- python 图像读入 reshape尺寸时的问题
- AndroidMainfest.xml详解——<category>
- 10、二进制中1的个数
- SpringMVC文件上传
- 树莓派平台简介
- Git远程操作详解(转)
- 推荐系统:技术、评估及高效算法 第11章
- 4.NLTK之编写结构化程序