C# 自动创建RectTransform的原因

C# 自动创建RectTransform的原因,c#,unity3d,C#,Unity3d,我正在创建两个游戏对象 一个自动获得一个RectTransform,而无需显式添加一个,另一个则不会 在这种情况下,不会添加RectTransform,但可以访问它: GameObject nCanvasGO = new GameObject("CanvasContainer"); Canvas nCanvas = nCanvasGO.AddComponent<Canvas>(); nCanvas.renderMode = RenderMode.WorldSp

我正在创建两个游戏对象

一个自动获得一个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
GameObject nCanvasGO=新游戏对象(“画布容器”);
Canvas nCanvas=nCanvasGO.AddComponent();
nCanvas.renderMode=renderMode.WorldSpace;
nCanvasGO.AddComponent();
nCanvasGO.AddComponent();
RectTransform rtCanvasGO=nCanvasGO.GetComponent()//可以访问,不为空
这一个没有RectTransform:

    GameObject nAnimInfo = new GameObject("AnimInfo");
    RectTransform rtAnimInfo = nAnimInfo.GetComponent<RectTransform>(); // is null
GameObject nAnimInfo=新游戏对象(“AnimInfo”);
RectTransform rtAnimInfo=nAnimInfo.GetComponent();//是空的
因此,我想问一下,如果将画布组件添加到游戏对象中,是否会添加RectTransform,或者这里的原因是什么


谢谢。

是的,将画布添加到游戏对象将自动将
变换更改为
矩形变换。这是因为rect变换是二维等效的
变换
,具有一些附加功能,如锚定

从团结出发:

Rect变换组件是变换组件的二维布局对应项。其中Transform表示单个点,Rect Transform表示一个矩形,该矩形表示一个UI 元素可以放置在内部。如果矩形变换的父对象也是矩形变换,则子矩形变换还可以指定其相对于父矩形的位置和大小

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

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

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

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