C# 自动创建RectTransform的原因
我正在创建两个游戏对象 一个自动获得一个RectTransform,而无需显式添加一个,另一个则不会 在这种情况下,不会添加RectTransform,但可以访问它:C# 自动创建RectTransform的原因,c#,unity3d,C#,Unity3d,我正在创建两个游戏对象 一个自动获得一个RectTransform,而无需显式添加一个,另一个则不会 在这种情况下,不会添加RectTransform,但可以访问它: GameObject nCanvasGO = new GameObject("CanvasContainer"); Canvas nCanvas = nCanvasGO.AddComponent<Canvas>(); nCanvas.renderMode = RenderMode.WorldSp
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,比如图像或文本。因此,需要进行矩形变换