
不知道有没人需要这样的代码,就是.sizeDelta //不确定是不是英文翻译的原因,基本很难理解,sizeDelta===Size,//未必完全正确,但这么写好像总没错过
cs
//image 在一个UnityEngine.UI.Image 的数组内
foreach (var image in lstOfButtons) {
var rectangle =image.rectTransform.rect;
rectangle.width = buttonSize.x;
rectangle.height = buttonSize.y;
//不能这么写
//image.rectTransform..rect = rectangle;
var t = image.GetComponent<RectTransform>();
var RECT = t.rect;
image.rectTransform.sizeDelta = buttonSize;//buttonSize 是 Vector2
}
很多年前,分享过这个项目
Unity判断鼠标点击是否在某个窗口 RectTransform 内_unity rectanglecontainsscreenpoint-CSDN博客

原理
RectTransform是一个很特殊的存在//上面的代码已经明显,指出了
因为,一般人的理解
GameObject
Transform,
已经觉得Unity有些多此一举了
(实际上Transform 也是GameObject的一个Component)
应该是可以AddComponent<Transform>()不是么
但实际上只能,AddComponent<RectTransform>()
这是为什么呢
主要还是历史原因
我很难说这个结构到底有什么好,但古今中外,那么一二十年的游戏引擎经验,我从未见第二个个引擎能做到
(没有这个结构的,自以为简单的就是做不好)
很多引擎觉得transform多省事,就是
gameobject
---Transform
---Component
这样的结构多好,多简单
实际上,最重要的结构就是Unity隐藏起来的:RectTransform
这是一个特殊的Component,特殊的UI结构(也是必然的UI结构)
因为一个比较符号用户习惯的UI编辑器有三部分
RectTransform几乎完美的融合你这三部分(用最简单,最贴近用户的做法,虽然API名字有些怪异)
并不是程序正义,而是符合用户习惯。。。
