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

一、需求

编辑器中选中物体,判断这些物体及子物体上是否有丢失的脚本

二、实现过程:

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

在这里插入图片描述

三、代码清单:

该脚本为编辑器脚本,直接新建一个Editor文件夹,放在下面即可

using UnityEngine;
using UnityEditor;
using System.Linq;

public class txEditorFunctions : EditorWindow {

    [MenuItem("脚本处理/查找有missing脚本的物体")]
    static void FindMissingScriptObject()
    {
        /*******************************************************************************************
         * 1、编辑器选中n个物体
         * 2、获取这n个物体及其它们的子物体,数据集记为A
         * 3、A中全部物体判断他们是否有null的脚本(MonoBehaviour)
         * 
         * 判断一个物体(object)是否有空脚本:obj.GetComponents<MonoBehaviour>().Any(mono => mono == null)
         *******************************************************************************************/
        var objs = Selection.gameObjects;
        Debug.Log($"选中的物体数量为:{objs.Length}");

        var allObjs = objs.SelectMany(obj => obj.GetComponentsInChildren<Transform>().Select(x => x.gameObject)).ToList();
        Debug.Log($"选中的物体及其子物体的数量为:{allObjs.Count()}");

        allObjs.ForEach(obj =>
        {            
            //1、该物体是否有null的脚本
            var hasNullScript = obj.GetComponents<MonoBehaviour>().Any(mono => mono == null); //注意:用【MonoBehaviour】而不是用【MonoScript】
            //Debug.Log($"是否有空脚本:{hasNullScript},物体名字:【{obj.name}】");

            //2、Debug物体名字
            if (hasNullScript)
            {
                Debug.Log($"物体 【{obj.name}】 上有Missing的脚本");                
            }
        });
    }
}
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值