Unity UGUI——Image

http://blog.csdn.net/a237653639/article/details/50774207

UGUI源碼學習之初涉Image(一)

近幾天開始ugui源碼學習之旅,也算是自己第一次開始學習比較系統的源碼^^。而由於源碼涉及內容較多,所以我打算呢分節講解,畢竟如果一節能夠講清楚一件事情就已經很不錯了(所以還是希望自己能夠講清楚^^)。

原文鏈接:http://blog.csdn.net/a237653639/article/details/50774207

ps:

1.對整個ugui類圖的總覽請自行使用VS生成類圖。

2.源碼下載鏈接:請翻牆後下載UGUI5.3源碼


粗看源碼可知,ugui源碼分爲運行時代碼和編輯器代碼,運行時和編輯器代碼又被分爲EventSystem和UI兩部分。本小節僅講解運行時代碼, 
而我們對UI的的操作又更常見,更熟悉,所以先來講解下UI,而UI中又數Image,Text等控件最重要,那麼就從Image開始吧。。。 
(所以我的邏輯是先從熟悉的開始)

Runtime

  • UI
Image

(這裏還有一個邏輯就是先從界面開始,其次是private的內部實現,即以下截圖。)

1.Source Image。在新建Panel面板時,會自動添加Image組件,且其中使用的是unity自帶的Background圖片。這樣您會看到屏幕並未被填滿,且四周有一定的空隙。 
如果您的目的是要填滿全屏,則建議設Source Image和Material爲None,這樣就是使用Unity的默認渲染方式(而不是使用指定的Background圖片)。這裏的Source Image是ImageEditor.cs生成的,下面是對應的功能實現代碼片段,而我沒有直接貼代碼是覺得截圖更直觀易找,只是可能會難看一點。

2.Color。(點開後有一個Hex Color表示當前顏色的十六進制。)

3.Material。

4.Raycast Target。是否標記爲光線投射目標。默認勾選表示鼠標點擊到該物體後不再穿透到下面的物體。取消勾選則穿透該物體。tips:新建button時可設置其上物體爲點擊穿透。

5.Image Type 6.FillMethod 7.FillOrigin 8.FillAmount 9.Clockwise 10.Fill Center

11.Preserve Aspect。保持圖片原始的寬高比。(不論圖片的寬高如何調整,寬高的比例保持始終不變,僅用於ImageType爲Simple和Filled。) 

PS:沒有寫像3,5,6,7。。這些原因有:1.個人感覺比較容易理解,基本不會產生誤解。2.產生原因1的想法是可能因爲自己太嫩了,還沒有遇到坑。


下面再從Image所繼承的類和實現的接口來看看這些接口和父類有什麼用。

查看類圖,

public class Image : MaskableGraphic, ISerializationCallbackReceiver, ILayoutElement, ICanvasRaycastFilter
  • 1

  • MaskableGraphic

Graphic是對玩家來說可見的UI控件的基類。而MaskableGraphic繼承自Graphic類,那麼就帶有Graphic的屬性,比如佈局啦,材質啦,頂點處理啦,顏色啦。而作爲Graphic的子類的MaskableGraphic的不同之處在於自己是否可被標記爲masked,

而默認值爲true表示可被mask。

Graphic類緩存了rectTransform。

而Image繼承了MaskableGraphic,則擁有了以上屬性。


  • ISerializationCallbackReceiver

這東西有兩個回調,OnAfterDeserialize和OnBeforeSerialize,意思就是允許Image在被序列化和反序列化的前後進行自己的一些處理。那就是說Image有被序列化這一回事咯?那當然了,比如*.unity就是保存了場景的數據,而在運行時我們就去讀取其中的數據用來反序列化爲運行時的對象。


  • ILayoutElement

見文知意,這個接口是爲了配合Layout這一類腳本使用的。有了它,再在Image所在對象上掛一個Layout腳本,就可以進行佈局操作咯。


  • ICanvasRaycastFilter 
    這個接口是Button的事件用的。其中有一個接口方法IsRaycastLocationValid, 用來檢測光線投射到該物體是否有效。

  • EventSystem

(不涉及這部分,故暫空。)


Editor

  • UI

  • EventSystem

(還沒有開始看,所以暫空。)


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章