Unity - A计划(永久有效期) 扫二维码继续学习 二维码时效为半小时

(196评价)
价格: 4019.00元
关于GetComponentInParent的问题
sdhexu发起了话题2017-07-19
6
回复
4845
浏览

GetComponentInParent<MyComponetType>()   这个函数感觉总是莫名其妙。

我在做UI的时候,一开始用的挺好的,马上就要收工了,但是突然间,我发现它有时候会返回null,非常确定已经肯定,他的父亲是有那个组建的。我查询了一下API说明,上面说,Only component on active Game Objects are returned....

我滴个天,这句鸟语是不是说,只有在组建在活动状态的时候(没有被禁用)的时候,他才能找到???

为什么,我之前也在用这个函数,那个物体(是个UI界面)也是初始状态并不激活,他就能找到???现在却不行了?

如果确实这个原因,我如何能找到父亲的组件,即使它没有被激活仍然能找到??

所有回复
  • sdhexu 2017-07-20

    我就是想知道,有没有能够即时物体没有激活情况下仍能获取父亲组件的方法。

    我现在的解决方法是,先用GetComponentInParent获取,如果没有获取到,就用父亲的路径去获取,像这样:

       tranform.parent.parent.parent.GetComponent();   // 这样能够获取。

    还有-5条回复,点击查看
    你还没有登录,请先登录注册
  • siki 2017-07-20

    GetComponentsInParent(true)这样就会查找没有激活的物体

    还有-4条回复,点击查看
    你还没有登录,请先登录注册
  • sdhexu 2017-07-21

    siki大神,没有这个重载。。GetComponentsInParent( bool ) 根本没有这个形式的重载呀。。

    只有两种形式:

    1、GetComponentsInParent( string type );

    2、GetComponentsInParent<Type>();

    没有带Bool参数的重载形式。。。。

    还有-5条回复,点击查看
    你还没有登录,请先登录注册
  • siki 2017-07-22

    这个api可能实在新版本取消了

    可以使用这个GetComponentInChildren

    transform.root.GetComponentInChildren(true) true表示包含未激活的游戏物体

    • sdhexu 2017-07-22

      这样实际上是从根部直接查找孩子。。
      但这样找到的可能不是我要的。因为具有这个组件的可能有多个,我只是想根据某个物体,找到具有某个组件它的祖先。。但他祖先不一定是被激活的。
      现在我自己用递归的方法和GetComponent函数写了一个方法。。。。
      谢谢siki

      (0) 回复
    还有-4条回复,点击查看
    你还没有登录,请先登录注册
发表回复
你还没有登录,请先 登录或 注册!