iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >Unity 实现删除missing脚本组件
  • 298
分享到

Unity 实现删除missing脚本组件

2024-04-02 19:04:59 298人浏览 薄情痞子
摘要

通过Resources.FindObjectsOfTypeAll查找所有GameObject,然后通过.hideFlags == HideFlags.None判断是否为存在于Hier

通过Resources.FindObjectsOfTypeAll查找所有GameObject,然后通过.hideFlags == HideFlags.None判断是否为存在于Hierarchy面板。(此为编辑器脚本)

详细代码:


 
using UnityEngine;
using UnityEditor; 
public class DeleteMissingScripts
{
    [MenuItem("MyTools/Delete Missing Scripts")]
    static void CleanupMissingScript()
    {
        GameObject[] pAllObjects = (GameObject[])Resources.FindObjectsOfTypeAll(typeof(GameObject));
 
        int r;
        int j;
        for (int i = 0; i < pAllObjects.Length; i++)
        {
            if (pAllObjects[i].hideFlags == HideFlags.None)//HideFlags.None 获取Hierarchy面板所有Object
            {
                var components = pAllObjects[i].GetComponents<Component>();
                var serializedObject = new SerializedObject(pAllObjects[i]);
                var prop = serializedObject.FindProperty("m_Component");
                r = 0;
 
                for (j = 0; j < components.Length; j++)
                {
                    if (components[j] == null)
                    {
                        prop.DeleteArrayElementAtIndex(j - r);
                        r++;
                    }
                } 
                serializedObject.ApplyModifiedProperties();
            }
        }
    }
}

补充:Unity中一键删除所有已失效的脚本

如下所示:


//删除所有Miss的脚本 
using UnityEngine;
using UnityEditor; 
public class DeleteMissingScripts
{
    [MenuItem("MyTools/Delete Missing Scripts")]
    static void CleanupMissingScript()
    {
        GameObject[] pAllObjects = (GameObject[])Resources.FindObjectsOfTypeAll(typeof(GameObject));
 
        int r;
        int j;
        for (int i = 0; i < pAllObjects.Length; i++)
        {
            if (pAllObjects[i].hideFlags == HideFlags.None)//HideFlags.None 获取Hierarchy面板所有Object
            {
                var components = pAllObjects[i].GetComponents<Component>();
                var serializedObject = new SerializedObject(pAllObjects[i]);
                var prop = serializedObject.FindProperty("m_Component");
                r = 0;
 
                for (j = 0; j < components.Length; j++)
                {
                    if (components[j] == null)
                    {
                        prop.DeleteArrayElementAtIndex(j - r);
                        r++;
                    }
                } 
                serializedObject.ApplyModifiedProperties();
            }
        }
    }
}

此为编辑器脚本

使用方法:

方法二:


using UnityEngine;
using UnityEditor; 
public class DeleteMissingScripts
{
    [MenuItem("Edit/Cleanup Missing Scripts")]
    static void CleanupMissingScripts()
    {
        for (int i = 0; i < Selection.gameObjects.Length; i++)
        {
            var gameObject = Selection.gameObjects[i];
 
            // We must use the GetComponents array to actually detect missing components
            var components = gameObject.GetComponents<Component>();
 
            // Create a serialized object so that we can edit the component list
            var serializedObject = new SerializedObject(gameObject);
            // Find the component list property
            var prop = serializedObject.FindProperty("m_Component");
 
            // Track how many components we've removed
            int r = 0;
 
            // Iterate over all components
            for (int j = 0; j < components.Length; j++)
            {
                // Check if the ref is null
                if (components[j] == null)
                {
                    // If so, remove from the serialized component array
                    prop.DeleteArrayElementAtIndex(j - r);
                    // Increment removed count
                    r++;
                }
            } 
            // Apply our changes to the game object
            serializedObject.ApplyModifiedProperties();
            EditorUtility.SetDirty(gameObject);
        }
    }
}
 

建议采取方法二

已知两种方法可能会出现某些错误,

方法二运行几次会自动修复(方法一未测试

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。如有错误或未考虑完全的地方,望不吝赐教。

--结束END--

本文标题: Unity 实现删除missing脚本组件

本文链接: http://www.lsjlt.com/news/123237.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Unity 实现删除missing脚本组件
    通过Resources.FindObjectsOfTypeAll查找所有GameObject,然后通过.hideFlags == HideFlags.None判断是否为存在于Hier...
    99+
    2024-04-02
  • Unity删除missing脚本组件的方法
    这篇文章主要介绍“Unity删除missing脚本组件的方法”,在日常操作中,相信很多人在Unity删除missing脚本组件的方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Unity删除missing脚...
    99+
    2023-06-14
  • Vbs脚本如何实现radmin删除自身
    这篇文章主要为大家展示了“Vbs脚本如何实现radmin删除自身”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Vbs脚本如何实现radmin删除自身”这篇文章吧。代码如下:on err...
    99+
    2023-06-08
  • Shell脚本怎么实现删除一年前文件功能
    本篇内容主要讲解“Shell脚本怎么实现删除一年前文件功能”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Shell脚本怎么实现删除一年前文件功能”吧!代码如下:#!/bin/bash#Descr...
    99+
    2023-06-09
  • Unity实现圆形Image组件
    本文实例为大家分享了Unity实现圆形Image组件的具体代码,供大家参考,具体内容如下 一、前言 游戏里很多图片都是以圆形展示的,例如头像、技能图标等,一般做法是使用Image组件...
    99+
    2024-04-02
  • shell脚本实现删除服务器指定目录下文件方法
    删除4天前的文件 #!/bin/bash# 指定要删除文件的目录路径folder_path="/path/to/folder"# 查找并删除4天以前的文件find $folder_path -type...
    99+
    2023-09-03
    服务器 linux bash
  • 如何实现自动删除归档日志的脚本
    这篇文章主要介绍如何实现自动删除归档日志的脚本,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!自动删除归档日志的脚本(尤其是dataguard环境)已有 236 次阅读2011-12-16 21:02 |个人分类:or...
    99+
    2023-06-04
  • python中怎么使用 svn脚本删除文件
    这篇文章将为大家详细讲解有关python中怎么使用 svn脚本删除文件,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。python svn脚本需要我们不断的学习,在学习的过程中我们会遇到不少的...
    99+
    2023-06-17
  • VBS脚本和BAT批处理如何实现删除自身
    这篇文章给大家分享的是有关VBS脚本和BAT批处理如何实现删除自身的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。VBS脚本和BAT批处理自身删除的方法删除自身之:VBS 把下面的脚本保存为selfkill.vbs...
    99+
    2023-06-08
  • 如何用bat实现删除系统脚本调试程序
    这篇文章主要介绍“如何用bat实现删除系统脚本调试程序”,在日常操作中,相信很多人在如何用bat实现删除系统脚本调试程序问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何用bat实现删除系统脚本调试程序”的疑...
    99+
    2023-06-09
  • Unity如何实现圆形Image组件
    本文小编为大家详细介绍“Unity如何实现圆形Image组件”,内容详细,步骤清晰,细节处理妥当,希望这篇“Unity如何实现圆形Image组件”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、前言游戏里很多图片...
    99+
    2023-06-26
  • linux删除无效链接文件的脚本分享
    这篇文章主要介绍“linux删除无效链接文件的脚本分享”,在日常操作中,相信很多人在linux删除无效链接文件的脚本分享问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”linux删除无效链接文件的脚本分享”的疑...
    99+
    2023-06-09
  • 可以删除指定天数文件的vbs脚本
    本篇内容介绍了“可以删除指定天数文件的vbs脚本”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!复制代码 代码如下:Const Fi...
    99+
    2023-06-08
  • 怎么用shell脚本实现对OGG进程过期trail文件的删除处理
    本篇内容主要讲解“怎么用shell脚本实现对OGG进程过期trail文件的删除处理”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用shell脚本实现对OGG进程过期trail文件的删除处理”...
    99+
    2023-06-04
  • Windows7快速删除系统垃圾文件BAT脚本分享
        &nb 1.在桌面上找到开始按钮,点击所有程序--附件—记事本,创建个新的记事本如下图所示 2.复制下面的红字部分,粘贴进新建的文本文档里 复制代码代码如下:@echo offe...
    99+
    2023-06-07
    Windows7 删除垃圾文件 BAT脚本 脚本 BAT 系统 垃圾文件
  • Unity UI组件ScrollRect实现无限滚动条
    在游戏开发中经常遇到滚动显示的数据,特别是商店商品 排行榜 .......等数据很多,每一条数据去加载一个UI来显示显然对内存浪费很大,这种情况处理一般就是用几个显示条可滚动循环显示...
    99+
    2024-04-02
  • vue怎么实现仿qq左滑置顶删除组件
    这篇文章主要讲解了“vue怎么实现仿qq左滑置顶删除组件”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vue怎么实现仿qq左滑置顶删除组件”吧!效果图:HTML代码:主要的html代码:&l...
    99+
    2023-07-04
  • Qt多版本共存使用实现组件增删
    目录前言一、组件增删,多版本下载1.进入安装器2.页面操作3、安装效果二.Qt Creator使用1.查看安装版本2.选择编译版本2.编译版本前言 在Qt大版本更新后,有些方法函数被...
    99+
    2023-02-15
    Qt多版本组件增删 Qt组件增删
  • python 脚本实现备份文件
    ''' 功能:备份文件 版本:1.0 作者:白 ''' import  os,time,sys d_dir = '/data/backup/' d_file = 'system_bak.tar.gz' s_dir = ['/etc','/b...
    99+
    2023-01-31
    脚本 备份文件 python
  • 怎么用VBS脚本删除指定以外的文件或文件夹
    本篇内容介绍了“怎么用VBS脚本删除指定以外的文件或文件夹”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Option Explic...
    99+
    2023-06-08
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作