敝人最近刚刚学到Unity的UGUI,横在面前的第一座大山就是每个控件必备的Rect Transform组件。因此在此总结整理下自己对它的理解,侧重点是对它实现原理的理解。
为了统一说法,下面对三维空间中的gameObject称为“物体”;UI层面的gameObject称为“控件”;控件挂载的脚本称为“组件”;说明父子关系时,把子控件称为“元素”;
1. 为什么用Rect Transform,而不用Transform了呢?
因为Transform里只有物体的位置信息,没有大小信息。不是说Unity不想把大小信息存进去,而是没办法。因为三维物体的形状是任意的,比如立方体、球体、胶囊体等等。不方便统一表示。而对于UI来说,所有的控件都是二维矩形,只有长和宽两个参数,这使得把控件大小信息表示出来成为可能。于是干脆就采用“矩形变换”来表示,实现了对控件长宽的控制。
在我看来,UGUI里的基本控件是空控件、文本框、图片这三种矩形区域。加上特效、交互组件、布局组件即可组合成各种控件。
这里我也顺带查了下为啥图片都是矩形的,一种说法是古往今来的纸张、胶片都是矩形的(为了不产生裁切废料),数码相机感光原件、显示器也是矩形的。这些记录、显示图片的装置是矩形的,那图片也就一直是矩形了。即便是VR场景,也是生成一张矩形全景图。不过随着VR设备的应用普及,是否会产生球形摄影、存为球形图片、然后必须在VR设备中进行720°的观看和编辑的情况呢?这部分暂时没时间去了解,先不深究了。