不知道有沒人需要這樣的代碼,就是.sizeDelta //不確定是不是英文翻譯的原因,基本很難理解,sizeDelta===Size,//未必完全正確,但這么寫好像總沒錯過
//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名字有些怪異)
并不是程序正義,而是符合用戶習慣。。。