close

我的環境配置:Windows 10、Unity 5.3.4f1。

 

2016.11.17 更新:修正邊緣無法正常繪圖問題,以及挖空的位置無法重疊問題。


相信大家都有製作過 "新手教學" 之類的功能吧!
大家的作法可能都是這樣

image01.jpg
在原畫面上加入一張滿版的半透明黑色底圖,然後把想要突顯的地方挖空,再用個箭頭表示,好讓使用者可以注意到。

但是這作法很繁瑣,因為每一個步驟都需要美術出圖,每一張圖都要討論好挖空的位置跟尺寸,只要步驟、位置、尺寸有更動,美術就要再重新出圖,非常的麻煩且佔容量!
還有最讓人傷心的地方...就是這教學只會出現一次,而 99.99% 的使用者都會選擇跳過,可偏偏這項功能又不能夠省略!    

所以這邊我想讓程式自己去建立遮罩圖片,如此一來美術就不需要出圖了,而程式也可以自由的控制需要挖空的位置與尺寸,不但可以省下很多麻煩,還可以大大的節省容量!


前提:我的建立遮罩演算法並不算好,只是勉強堪用而已,歡迎大家提出更好的方法喔!
而我把建立遮罩的功能拆成好幾個步驟,雖然這會降低效能,但卻可以讓大家容易明白它的運作架構,以及方便繼承後去做修改或延伸!


建立遮罩圖片的腳本就在文章最下方,需要的人可直接下載使用。


這邊我簡單的做個說明以及範例:

我把流程拆成這些步驟
一、建立底圖 CreateTexture()

image02.jpg

 

 

二、裁剪出遮罩範圍,但只是裁剪出四分之一的區塊,目的是降低運算量 ClipMask()
image03.jpg

 

 

三、將裁剪出的範圍填滿,一樣只填滿這四分之一的區塊 DrawFull()
image04.jpg

 

 

四、計算出這漸層效果,一樣只計算這四分之一的區塊 Gradients()
image05.jpg

 

 

五、將這四分之一的區塊複製到區塊上,這樣就完整囉! Copy()
image06.jpg

 

 

六、將結果覆寫到圖片上,完成! Apply()
image06.jpg
其實步驟二到步驟五,都是不會將結果覆寫到圖片上的,必須執行步驟六的方法後,才會覆寫到圖片上。
這邊只是為了方便大家看得明白而已,所以記得一定要執行步驟六的方法!


該腳本擁有幾項基本的變數可以調整
image07.jpg
ColorBackground:底圖的背景色,這邊顏色預設為透明度 80% 的黑色。
ColorMask:裁剪出來的區塊顏色,這邊顏色預設為全透明的黑色。
AryRect:總共要裁剪出幾塊區塊,這裡可以隨意設定位置與尺寸,但是效果不疊加。
Gradients:漸層效果的程度。
Rounded:圓角矩形的圓角程度。

這邊有一點要注意,AryRect 這個位置是為圖片左下角為起始點,所以記得自己先換算座標再使用。
AryRect 不想填也可以,有提供 AddMask() 的方法,可以動態裁剪,不過記得先自己換算座標後再使用。 
PS:裁切的尺寸,建議為 2 的倍數。

裁剪多塊區塊效果
image08.jpg


各裁切腳本效果:

TextureMask.cs 基本矩形
image09.jpg

 

 

TextureMask_RoundedRectangle.cs 圓角矩形
image10.jpg

 

 

TextureMask_Circle.cs 圓形
image11.jpg

 

 

使用方式,直接將腳本拖曳到物件上就可以了!
image12.jpg


下面提供的範例,可直接點選畫面,程式會直接在點選的位置上動態裁剪出一個區塊。
這邊可以參考看看 TestMask.cs 這支腳本,裡面擁有簡單的座標轉換寫法以及動態裁剪的使用。


腳本下載:https://drive.google.com/file/d/0B0QPre3qvuw-YUlyT1hHWkt2OUU/view?usp=sharing&resourcekey=0-aqjVzCxmO3uduF82GQ1fOg
範例下載:https://drive.google.com/file/d/0B0QPre3qvuw-SUlJQjRLQUZGNkk/view?usp=sharing&resourcekey=0-27T_SwqEnqqLJDb8vmQF6Q

arrow
arrow
    文章標籤
    Unity C# Mask Texture
    全站熱搜

    岳 發表在 痞客邦 留言(0) 人氣()