【问题标题】:Unity get root canvas gameobject from its childUnity 从其子级获取根画布游戏对象
【发布时间】:2020-12-08 09:10:04
【问题描述】:

我想从画布的子/成员获取根画布中可用的数据。可以使用这个https://docs.unity3d.com/ScriptReference/Canvas-rootCanvas.html 来做到这一点,但如果this.gameobject 没有画布组件并且添加画布组件是不可行的,并且从统一编辑器手动分配游戏对象也是不可行的,因为它关闭了门用于自动化。

所以我的问题是,如何在不使用this.gameObject.GetComponent<Canvas>().rootcanvas 的情况下从其子级获取根画布游戏对象?我也尝试过collider.transform.root,但如果根画布不在顶层层次结构中,它会失败。

【问题讨论】:

  • 我认为您的问题可能是基于错误的假设。不可能有最终不在 Canvas 下方的可见 UI。如果您确实有一个没有根画布的 UI 对象,它将不可见。
  • @Joseph 是的,但是要找到 UI 对象的根画布,我需要使用 this.gameObject.GetComponent().rootcanvas ,如果我的游戏对象没有画布组件,我使用 canvas.rootcanvas 找不到根画布

标签: unity3d user-interface canvas


【解决方案1】:

试试GetComponentInParent<Canvas>().rootCanvas。这假设您有一个有效的、可见的 UI 元素。您可以看到的任何 UI 元素都必须在其层次结构中具有更高的 Canvas,然后您可以获得 那个 画布的 rootCanvas。

【讨论】:

  • 好的,谢谢,对不起,我是统一的初学者,我完全忘记了这个存在。在没有画布组件的情况下无法直接从 ui 成员中找到根画布有点烦人。这可行,但如果对象是 1000+ 对象从最近的父级与画布组件的层次结构中下降,那么性能会有点慢
  • 如果您担心搜索速度很慢,一个解决方案是在创建 UI 元素时添加对父画布的引用(如果您知道的话)。此外,您应该知道 .rootCanvas 属性只是进行递归 GetComponentInParent 调用的快捷方式,因此如果您不提前捕获这些引用,则没有太多选择。
  • 感谢您在这方面帮助我,如果您有兴趣,您能帮我吗? stackoverflow.com/questions/63482810/… ,是关于性能重的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-14
  • 1970-01-01
  • 2021-12-10
  • 1970-01-01
  • 2017-12-30
相关资源
最近更新 更多