Resources.FindObjectsOfTypeAll过滤掉预设体的方法

一、问题描述:

功能模块需要将层次面板中的某一个自定义脚本组件的所有实例保存到一个字典里,脚本里有唯一标识这些组件实例的id,这些脚本中有些在程序开始时是隐藏的,即inactive的,GameObject.FindObjectsOfTypeAll<T>()并不能获取到隐藏实例,但是Resources.FindObjectsOfTypeAll<T>()是可以的,但是Resources.FindObjectsOfTypeAll<T>()连同预设体也一并找到了,这并不是我想要的。看到网上有好些人在纠结这个问题,就共享出来吧

二、解决方法。

在添加到字典里时,设定添加的条件:此实例的gameObject所属场景的名字不为空。下面贴出我的部分代码:

FuncReactor[] frs = Resources.FindObjectsOfTypeAll<FuncReactor>();
            for (int i = 0; i < frs.Length; ++i)
            {
                if (frs[i].gameObject.scene.name != null)
                {
                    if (allFrs.ContainsKey(frs[i].identifyNo.ToString()))
                    {
                        Debug.LogError("scenename:" + frs[i].gameObject.scene.name + ",same key" + frs[i].identifyNo.ToString());
                    }
                    else
                    {
                        allFrs.Add(frs[i].identifyNo.ToString(), frs[i]);
                    }
                }
                else
                {
                    Debug.Log("这是一个预设体!");
                }
            }
三、注意

假如gameObject是个预设体,它的scene是不为空的,所以根据它的scene是不是为空来判断是不是预设体是达不到目的的。




  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值