您好,登錄后才能下訂單哦!
NGUI做UI的話,有個(gè)功能很常用,比如:
這樣的一個(gè)界面,如果大圖的話一個(gè)圖集都放不下幾張,這時(shí)為了省資源,美術(shù)會(huì)把這個(gè)圖切9宮。
不過(guò)這樣依然很大,這時(shí)就會(huì)提出,如果這個(gè)圖是左右相同的話,左右只出一半,另一半程序自己拼,上下相同只切上面,下面程序拼,上下左右相同的話出左上角,其余自己拼。
像這個(gè)就會(huì)這么出圖
只出了左邊。
自己拼不僅蛋疼,更重要的是拼出來(lái)的界面會(huì)有黑邊,并且在適配不同界面的時(shí)候黑邊總是會(huì)跑出來(lái)。
這時(shí)一般項(xiàng)目組就會(huì)拓展一下NGUI的UISprite,做一個(gè)鏡像功能,直接填充出來(lái)右邊。
像這樣:
通過(guò)選擇MirrowType來(lái)覺(jué)得是左右填充還是上下填充還是上下左右填充。
怎么實(shí)現(xiàn)呢,這里有點(diǎn)復(fù)雜,而且每個(gè)NGUI版本都不太一樣,這里講講大概就直接發(fā)代碼
1.首先是改Inspector文件(其實(shí)這個(gè)應(yīng)該放最后)
加一個(gè)鏡像選擇框
2.再在UIBasicSprite.cs上加上對(duì)應(yīng)的屬性
3.接下來(lái)在UISprite.cs上改,現(xiàn)在OnFill里加上鏡像邏輯,太長(zhǎng),截一部分:
這里的邏輯就是根據(jù)你選擇的鏡像模式,比如左右的話,就計(jì)算兩次uv信息,畫(huà)兩個(gè)UIRect,這里要拓展一下NGUIMath.cs的邏輯。就是加上計(jì)算鏡像的部分(這里自己看代碼,不做解釋了)
4.最后還是在UISprite.cs上改,在SImpleFill和SlicedFill上加上鏡像的邏輯,以SimpleFill舉例:
其實(shí)這里的邏輯就是如果是橫向鏡像,計(jì)算左邊的頂點(diǎn)數(shù)據(jù)、uv數(shù)據(jù)、顏色數(shù)據(jù),保存,再計(jì)算右邊的頂點(diǎn)、uv數(shù)據(jù)、顏色數(shù)據(jù),保存。其他按照這個(gè)邏輯類推
5.最后通過(guò)UIWidget自身的UpdateGeometry刷新ui
最后有一點(diǎn)要注意的是,這樣子的拼接有可能會(huì)有黑邊,但是可以通過(guò)減少uv采樣的一兩個(gè)像素來(lái)規(guī)避這個(gè)問(wèn)題
最后奉上demo
https://pan.baidu.com/s/1kRaBY2C85ftXS0_JPe_M-w
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。