為了寫自己的UI元件庫
搞這東西搞老半天啦,差點被玩死了
__________________________________________
GUITexture 小簡介
座標
場面上的物件座標跟攝影機的位置是兩回事,就算物件不動
你拉著攝影機到處跑也不會影響到她顯示的位置,她的座標永遠是攝影機的相對座標
而她的座標以螢幕左下到右上使用的參數是 0 ~ 1
座標起點為螢幕左下,GUITexture 的座標對準點也是 Texture 的左下
意思就是座標歸零的時候圖是服貼左下角的
Pixel Inset
貼圖的偏移值
GUITexture 運算完 object 的 transform 之後,會再根據這個值來移動和縮放
她是根據 transform 的設定下,再"額外"去對 x.y.width.height 做基於 Pixel 大小的增減
至於為什麼要這樣
在介紹Texture 時有額外的說明
Texture
物件內部的Texture,可以根據自己喜好來替換
很單純
但這個地方卻是整個GUITexture的核心,也是最好玩的地方
當你從列表中 Create 一個 GUITexture 之後
你可以發現她的 Scale X 和 Y 都是歸零的
而她主要用來設定位置和大小的是使用它內部的 Pixel Inset
為什麼呢
因為 GUITexture 乘載 Texture 大小是根據螢幕而定的
不管你給的 Texture 大小如何,她都會自動縮放成螢幕大小
所以你用 Editor 去創建 GUITexture 的時候她才會預設 Scale 是 0
然後再利用 Pixel Inset 去修正成想要的大小
因為我們一般在設定UI都是用 pixel 大小去設定,用 Scale 去設定大小並不直觀
所以!
我這個用 AddComponent 的玩家被玩死了
我還莫名其妙為什麼我 Add 和直接拉的差這麼多這麼噁心,還以為出Bug了!
因為 GameObject 預設 Scale x 和 y 是 1 阿!
而 Editor 拉出來的 GUITexture 會好心的幫你歸 0 .................
所以我們要怎麼用程式來做呢?
很簡單
創出要掛 GUITexture 的 GameObject之後,請果斷的把她Scale X,Y 歸 0
然後 Add GUITexture
接著新增一個 Rect 指定給 GUITexture 的 Pixel Inset
最後你只要改這個 Rect 就行了,不需要再去碰 GUITexture 的 Pixel Inset
因為 GUITexture 的 Pixel Inset 是指向這個 Rect 的
改這個 Rect 就會改到 GUITexture 的 Pixel Inset
OnMouse 函式群
GUITexture 這個 Component 本身就具有偵測滑鼠事件的功能
所以在附掛的 Script 中可以直接使用 OnMouseDown 之類的所有 Function
當滑鼠觸發的時候會自動 call
_________________________________________
祝大家玩的愉快
Have a nice Day