代码之家  ›  专栏  ›  技术社区  ›  tmighty

自动创建RectTransform的原因

  •  1
  • tmighty  · 技术社区  · 6 年前

    一个自动获得一个RectTransform,而无需显式添加一个,另一个则不会。

    在这种情况下,不会添加RectTransform,但可以访问它:

        GameObject nCanvasGO = new GameObject("CanvasContainer");
        Canvas nCanvas = nCanvasGO.AddComponent<Canvas>();
        nCanvas.renderMode = RenderMode.WorldSpace;
        nCanvasGO.AddComponent<CanvasScaler>();
        nCanvasGO.AddComponent<GraphicRaycaster>();
    
        RectTransform rtCanvasGO = nCanvasGO.GetComponent<RectTransform>(); //can be accessed, isn't null
    

    这一个没有RectTransform:

        GameObject nAnimInfo = new GameObject("AnimInfo");
        RectTransform rtAnimInfo = nAnimInfo.GetComponent<RectTransform>(); // is null
    

    因此,我想问一下,如果将画布组件添加到游戏对象中,是否会添加RectTransform,或者这里的原因是什么。

    1 回复  |  直到 6 年前
        1
  •  3
  •   Remy    6 年前

    Transform RectTransform . 这是因为rect变换是与 使改变

    来自统一 docs :

    元素可以放置在内部。如果矩形变换的父对象也是矩形变换,则子矩形变换还可以指定其相对于父矩形的位置和大小。

    文档实际上并没有明确说明任何地方的转换会自动被RectTransform取代,尽管。。。

    此外,Canvas依赖于RectTransform,因此在没有RectTransform的情况下无法使用。当您尝试从画布中删除rect变换时,可以看到这一点。它会弹出“无法删除RectTransform,因为画布依赖于它”。

    添加到游戏对象的任何其他UI组件也会自动添加Recttransform组件(即图像、文本等)。这与Canvas的原因相同,它们依赖于RectTRansform。

    您还将注意到,您制作的任何游戏对象,如果是画布的子对象,默认情况下也会有一个RectTransform,这样它就可以相对于父对象(本例中的画布)rect transform锚定自身。可以从这些对象中删除rectTransform,只要其任何组件都不依赖于rectTransform。尽管我不明白为什么需要这样做,因为画布的任何子级都应该是某种形式的UI,比如图像或文本。因此,需要进行矩形变换。