美文网首页
Unity杂文——自动创建asset资源文件

Unity杂文——自动创建asset资源文件

作者: 脸白 | 来源:发表于2023-09-30 06:01 被阅读0次

    原文地址

    简介

    Unity保存数据的方式有很多,比如我们经常用的json,xml和Txt,笔者今天讲到的是另外一种保存方式,asset文件,这个是unity提供的一种新的保存数据的方式,笔者也是刚使用没多久,这里就不详细进行介绍了,笔者今天主要是介绍一键自动创建对应的asset文件。

    代码

    public class CreateAssetEditor
    {
    
        [MenuItem("Assets/Create/CreateAsset",false,81)]
        public static void OnCreateAsset()
        {
            foreach (var guid in Selection.assetGUIDs)
            {
                var path = AssetDatabase.GUIDToAssetPath(guid);
                var pathSplit = path.Split('/');
                var className = pathSplit[pathSplit.Length - 1].Replace(".cs", "");
                var classType = GetClassByClassName(className);
                var assetPath = path.Replace(".cs", ".asset");
                if (File.Exists(assetPath))
                {
                    LBLogWrapper.Error("创建失败,资源已经存在");
                }
                else if (classType != null) 
                {
                    var classInst = ScriptableObject.CreateInstance(classType);
                    AssetDatabase.CreateAsset(classInst,assetPath);
                }
                else
                {
                    LBLogWrapper.Error("创建失败,脚本不可创建");
                }
            }
        }
        
        [MenuItem("Assets/Create/CreateAsset",true)]
        private static bool IsValidateFun()
        {
            return (from guid in Selection.assetGUIDs
                select AssetDatabase.GUIDToAssetPath(guid)
                into path
                select path.Split('/')
                into pathSplit
                select pathSplit[pathSplit.Length - 1]).Any(className => className.Contains(".cs"));
        }
    
        /// <summary>
        /// 通过类名获取对应的类
        /// </summary>
        /// <param name="className"></param>
        /// <returns></returns>
        private static Type GetClassByClassName(string className)
        {
            var allAssemblies = AppDomain.CurrentDomain.GetAssemblies();
    
            return allAssemblies.SelectMany(assembly => assembly.GetTypes()).FirstOrDefault(type =>
                type.Name == className && type.IsSubclassOf(typeof(ScriptableObject)));
        }
    
    }
    

    脚本的原理很简单,就是获取当前选择的脚本,判断是否可以创建asset文件,如果可以就是通过类名获取对应的类对象和,这里需要注意的是,<font color=red>文件名字必须等于类名</font>,然后通过类名获取对应的类型,就可以生成对应的asset文件了。

    相关文章

      网友评论

          本文标题:Unity杂文——自动创建asset资源文件

          本文链接:https://www.haomeiwen.com/subject/bddkbdtx.html