Unity的自動佈局系統(Auto Layout)基於佈局元素(Layout Element)和佈局控制器(Layout Controller)來實現,佈局元素的大小由佈局控制器決定。
Layout Element
一個佈局元素定義了以下的屬性:
- (Minimum)最小寬/高
- (Preferred)首選寬/高
- (Flexible)可選寬/高
佈局元素的大小遵循以下的原則進行計算:
- 首先,給佈局元素分配最小寬/高
- 接着,如果空間足夠,給佈局元素分配首選寬/高
- 最後,如果有額外空間,給佈局元素分配可選寬/高
每個具有Rect Transform的Game Object都可以看作一個佈局元素,其最小、首選、可選寬高都默認設置爲0,添加Layout Element組件可以改變這些屬性的值。
Layout Controllelr
一個佈局控制器會同時控制其自身的佈局元素(佈局控制器的Game Object)及其子佈局元素。有兩種常用的佈局控制器,分別是Content Size Fitter和Aspect Ratio Fitter。
Layout Group
佈局組也是一種佈局控制器,常用的佈局組(Layout Group)有Horizontal Layout Group、Vertical Layout Group和Grid Layout Group,佈局組只控制子佈局元素的大小以及排列方式,並且可以嵌套使用。佈局組不會設置自身的佈局元素的大小,它的大小由其它的佈局控制器或者手動進行設置。
這裏以垂直佈局組(Vertical Layout Group)爲例,介紹一下佈局組的一些屬性和用法。
- Child Alignment:如果子佈局元素的大小沒有填充全部的空間,子佈局元素會根據所選的屬性進行對其
- Child Controls Size:子佈局元素的大小是否由佈局組控制
- Child Force Expand:是否強制子佈局元素填充多餘的空間
垂直佈局組的遵循以下的原則進行子佈局元素的大小計算和放置:
- 佈局組的最小/首選高度是所有子佈局元素的高度以及間隔之和
- 如果垂直佈局組的高度小於或等於其最小高度,則其子佈局元素則設置爲各自的最小高度
- 如果垂直佈局組的高度越接近其首選高度,則其子佈局元素同樣越接近各自的首選高度
- 如果垂直佈局組的高度大於其首選高度,則額外的空間會按比例分配給每個子佈局元素,分配的比例基於每個子佈局元素的可選高度的相對值進行計算