Unity 编辑器功能之查找预制体

这篇具有很好参考价值的文章主要介绍了Unity 编辑器功能之查找预制体。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  static readonly string[] PREFAB_PATHS = new string[]
    {
             "Assets/GameRes/UIPanel",
    };

//预制体存放路径 

思路  通过文件夹得到所有的预制体,生成预制体,然后遍历所有预制体以及子物体是否存在 主键T如果存在进行callback操作,操作完之后根据savePrefab 进行保存,然后销毁

 static void ScanPrefabComponment<T>(Action<string, T> callback, bool savePrefab = false)
    {
        for (int i = 0; i < PREFAB_PATHS.Length; ++i)
        {
            DirectoryInfo dir = new DirectoryInfo(PREFAB_PATHS[i]);
            FileInfo[] files = dir.GetFiles("*.prefab", SearchOption.AllDirectories);

            for (int j = 0; j < files.Length; ++j)
            {
                string prefabPath = files[j].FullName.Substring(files[j].FullName.IndexOf("Assets"));
                try
                {
                    GameObject target = AssetDatabase.LoadAssetAtPath(prefabPath, typeof(GameObject)) as GameObject;
                    target = PrefabUtility.InstantiatePrefab(target) as GameObject;
                    _ScanPrefabComponment<T>(prefabPath, target.transform, callback);
                    if (savePrefab)
                    {
                        PrefabUtility.SaveAsPrefabAsset(target, prefabPath);
                    }
                    GameObject.DestroyImmediate(target); 
                }
                catch (Exception e)
                {
                    Debug.LogError($"Analyze prefab: {prefabPath} failed: " + e.Message + " StackTrace: " + e.StackTrace);
                }
            }
        }
    }

    static void _ScanPrefabComponment<T>(string prefabPath, Transform transform, Action<string, T> callback)
    {
        T comp = transform.GetComponent<T>();
        if (comp != null)
        {
            callback(prefabPath, comp);
        }

        for (int i = 0; i < transform.childCount; ++i)
        {
            _ScanPrefabComponment(prefabPath, transform.GetChild(i), callback);
        }
    }

//编辑器按钮

 [MenuItem("Tools/AddCanvas")]

 public static void AddButtonScaleEffect()
    {
        parent = GameObject.Find("Canvas").gameObject;
        ScanPrefabComponment<UIPanel>((prefabPath, text) =>
        {
            if (text.gameObject.GetComponent<GraphicRaycaster>() == null)
            {
                GraphicRaycaster graphicRaycaster = text.gameObject.AddComponent<GraphicRaycaster>();
                isChange = true;
            }
            if (text.gameObject.GetComponent<Canvas>() == null)
            {
                Canvas canvas = text.gameObject.AddComponent<Canvas>();
                canvas.overrideSorting = true;
                canvas.additionalShaderChannels = AdditionalCanvasShaderChannels.TexCoord1 | AdditionalCanvasShaderChannels.TexCoord2 | AdditionalCanvasShaderChannels.TexCoord3;
                isChange = true;
            }
            if (text.gameObject.GetComponent<CanvasScaler>() == null)
            {
                CanvasScaler canvasScaler = text.gameObject.AddComponent<CanvasScaler>();
                isChange = true;
            }
        });
    }

Unity 编辑器功能之查找预制体,unity,编辑器

Unity 编辑器功能之查找预制体,unity,编辑器

Unity 编辑器功能之查找预制体,unity,编辑器文章来源地址https://www.toymoban.com/news/detail-778259.html

到了这里,关于Unity 编辑器功能之查找预制体的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 编辑器脚本:Unity中如何查找哪些物体上有missing的脚本

    编辑器中选中物体,判断这些物体及子物体上是否有丢失的脚本 1、编辑器选中n个物体 2、获取这n个物体及其它们的子物体,数据集记为A 3、A中全部物体判断他们是否有null的脚本(MonoBehaviour) 4、判断一个物体(obj)是否有空脚本的关键语句: obj.GetComponentsMonoBehaviour().Any(mon

    2024年02月14日
    浏览(44)
  • Unity编辑扩展:功能篇之Json数据编辑器

    前言 编辑器扩展算是比较纯粹的功能开发,基本没有什么理论知识,都是一些 Unity 相关接口的使用与数据类型的设计操作等。在本篇文章主要的文字描述基本都是在做代码解释,为了使内容接受度更高,我会尽量描述到代码结构中的每个细节。如果有对此不太了解又很感兴

    2024年02月06日
    浏览(98)
  • Unity功能——编辑器模式下隐藏/显示游戏对象的快捷方法

    声明:本文为个人笔记,用于学习研究使用非商用,内容为个人研究及综合整理所得,若有违规,请联系,违规必改。 unity20XX.X.X VS20XX 在编辑器模式下,想快捷的显示/隐藏一个游戏对象. 实现原理: 对组件进行扩展方法.对MonoBehaviour ,Transform,GameObject 组件进行扩展方法 快捷键为

    2024年02月08日
    浏览(57)
  • Unity3d C#利用Editor编辑器拓展实现配置UI背景样式一键设置UI背景样式功能(含源码)

    在开发UI滚动列表的时候,经常会有每项的背景图不统一的情况,会间隔重复的情况居多。这种情况下,手动去设置间隔一行的背景图或者颜色是比较麻烦的。在此背景下,笔者尝试写个小工具,在搭建UI时配置一下循环背景的样式,可以通过一键点击后设置UI背景的样式,省

    2024年02月03日
    浏览(50)
  • 【Unity编辑器扩展】 | 编辑器扩展入门基础

    前言 当谈到游戏开发工具,Unity编辑器是一个备受赞誉的平台。它为开发者提供了一个强大且灵活的环境,使他们能够创建令人惊叹的游戏和交互式体验。 然而,Unity编辑器本身也是可以扩展和定制的,这为开发者提供了进一步提升工作流程和增强功能的机会。 在Unity 编辑器

    2024年02月10日
    浏览(80)
  • Unity编辑器扩展 | 编辑器扩展基础入门

    前言 当谈到游戏开发工具,Unity编辑器是一个备受赞誉的平台。它为开发者提供了一个强大且灵活的环境,使他们能够创建令人惊叹的游戏和交互式体验。 然而,Unity编辑器本身也是可以扩展和定制的,这为开发者提供了进一步提升工作流程和增强功能的机会。 在Unity 编辑器

    2024年02月10日
    浏览(71)
  • Unity 可视化节点编辑器(GraphView、编辑器扩展)

      前几天把导师的项目打包发布交了一稿,这半个星期除了再把项目缝缝补补外(说实话项目做到后边实在有些无聊,都是些琐碎的东西而且自己也学不到什么,纯粹是 浪费 消磨时间)无聊逛Unity商店发现了个有意思的东西,说实话一开始我以为只是单纯绘制的2D动画:

    2024年02月12日
    浏览(59)
  • Unity编辑器紫色

    紫色原因是因为编辑器内跑了其他平台的shader兼容性导致的,需要动态的去修改shader,主要用到Unity的api :  Shader.Find(shaderName); 具体的工具代码如下: Shader的添加形式大概有两种: 跟随AssetBundle 打进包里面,可以直接使用       自建材质  

    2024年02月03日
    浏览(52)
  • Unity 编辑器常用方法

    自动根据RuntimeInitializeLoadType选择一个时机执行。静态方法 AfterSceneLoad 在场景加载之后初始化子系统。这意味着子系统将在场景加载完成后进行初始化,并在场景加载后的脚本执行时可用。 BeforeSceneLoad 在场景加载之前初始化子系统。这意味着子系统将在场景加载之前进行初始

    2024年02月07日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包