Unity编辑器下某些方法执行结果与预期不同

49 篇文章 1 订阅

    Unity的transform中有一个GetComponentsInChildren方法,可以获取到GameObject下所有子物体上需要查找的组件,但是不知道为什么在编辑器下获取不到。

    在Unity编辑器模式下,用一个Object接收物体,OnGUI()中添加

obj = EditorGUILayout.ObjectField("需要查看的预制", obj, typeof(Object), false);代码。

然后在Unity中拖拽prefab到编辑器窗口中。把obj转换成GameObject后,使用如下代码查找子物体上的组件,

_gameObject.transform.GetComponentsInChildren<Transform>();

    结果组件找不到,并且发现GameObject下的GetComponentInParent也查找不到,其他的没有一一验证。(之前使用这个API的时候是用的Unity4.7.2,今天使用Unity5.6没有这个问题,如果遇到这个问题,在方法里面添加一个TRUE参数即可。如

_gameObject.transform.GetComponentsInChildren<Transform>(true);

--2018.05.02)

所以先写一个方法在编辑器模式下获取子物体的组件。代码如下:

/// <summary>
    /// 获取子物体的某个组件
    /// </summary>
    /// <typeparam name="T">组件泛型</typeparam>
    /// <param name="obj">父物体</param>
    /// <returns></returns>
    private T[] GetComponentsInChildren<T>(GameObject obj) where T : Component
    {
        if (obj == null)
            return null;
        Transform _tran = obj.transform;
        List<T> _listT = new List<T>();
        for (int i = 0; i < _tran.childCount; i++)
        {
            T _t = _tran.GetChild(i).GetComponent<T>();
            if (_t != null)
            {
                _listT.Add(_t);
            }
            if (_tran.childCount > 0)
            {
                T[] _childrenT = GetComponentsInChildren<T>(_tran.GetChild(i).gameObject);
                for (int j = 0; j < _childrenT.Length; j++)
                {
                    _listT.Add(_childrenT[j]);
                }
            }
        }
        return _listT.ToArray();
    }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值