Unity遊戲開發-UI中裁剪特效

在開發中,會遇到在UI上顯示特效問題,不僅要考慮特效和UI的層級問題,有時候還要考慮特效的裁剪,比如在Scrollview列表中的item顯示的特效,Mask默認是不會對特效進行裁剪, 所以需要修改特效的shader,達到裁剪的效果。

基本的原理

將mask的裁剪四邊形,傳遞給shader,在片元着色器將位於裁剪區域外的片元剔除, 這樣就能達到裁剪的效果。
在具體的shader裁剪中,參考了UI-Default.shader, 有一個操作,利用UnityUI.cginc的內置函數 UnityGet2DClipping()來獲取結果,爲我們節省了很多的步驟,不需要自己去判斷頂點的位置。
片元着色器
在shader中使用了着色器的變體,爲了通用性, 因爲特效的shader一般都是公用的, 所以當需要使用時,在材質中開啓關鍵字,再設置clipRect,就可以實現裁剪效果。
關於shader變體的知識,可以參考官方介紹
Mask的範圍,利用Recttransfrom.GetWorldCorners()來獲取。
可以在實例的SortOrder腳本中,看到層級處理 + 關鍵字的設置
具體的工程可以參考, MaskClipEffect場景
github
裏面有實際的場景實例和下載的特效文件,後續也會不斷補充。。

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