溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

【unity實(shí)用技能】NGUI圖片鏡像

發(fā)布時(shí)間:2020-02-29 20:19:06 來(lái)源:網(wǎng)絡(luò) 閱讀:4233 作者:xiaosongfang 欄目:游戲開(kāi)發(fā)

NGUI做UI的話,有個(gè)功能很常用,比如:
【unity實(shí)用技能】NGUI圖片鏡像

這樣的一個(gè)界面,如果大圖的話一個(gè)圖集都放不下幾張,這時(shí)為了省資源,美術(shù)會(huì)把這個(gè)圖切9宮。
不過(guò)這樣依然很大,這時(shí)就會(huì)提出,如果這個(gè)圖是左右相同的話,左右只出一半,另一半程序自己拼,上下相同只切上面,下面程序拼,上下左右相同的話出左上角,其余自己拼。
像這個(gè)就會(huì)這么出圖
【unity實(shí)用技能】NGUI圖片鏡像
只出了左邊。

自己拼不僅蛋疼,更重要的是拼出來(lái)的界面會(huì)有黑邊,并且在適配不同界面的時(shí)候黑邊總是會(huì)跑出來(lái)。
這時(shí)一般項(xiàng)目組就會(huì)拓展一下NGUI的UISprite,做一個(gè)鏡像功能,直接填充出來(lái)右邊。
像這樣:
【unity實(shí)用技能】NGUI圖片鏡像
通過(guò)選擇MirrowType來(lái)覺(jué)得是左右填充還是上下填充還是上下左右填充。

怎么實(shí)現(xiàn)呢,這里有點(diǎn)復(fù)雜,而且每個(gè)NGUI版本都不太一樣,這里講講大概就直接發(fā)代碼

1.首先是改Inspector文件(其實(shí)這個(gè)應(yīng)該放最后)
【unity實(shí)用技能】NGUI圖片鏡像
加一個(gè)鏡像選擇框
2.再在UIBasicSprite.cs上加上對(duì)應(yīng)的屬性
【unity實(shí)用技能】NGUI圖片鏡像

3.接下來(lái)在UISprite.cs上改,現(xiàn)在OnFill里加上鏡像邏輯,太長(zhǎng),截一部分:
【unity實(shí)用技能】NGUI圖片鏡像
這里的邏輯就是根據(jù)你選擇的鏡像模式,比如左右的話,就計(jì)算兩次uv信息,畫(huà)兩個(gè)UIRect,這里要拓展一下NGUIMath.cs的邏輯。就是加上計(jì)算鏡像的部分(這里自己看代碼,不做解釋了)

4.最后還是在UISprite.cs上改,在SImpleFill和SlicedFill上加上鏡像的邏輯,以SimpleFill舉例:
【unity實(shí)用技能】NGUI圖片鏡像
【unity實(shí)用技能】NGUI圖片鏡像
其實(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)題
【unity實(shí)用技能】NGUI圖片鏡像

最后奉上demo
https://pan.baidu.com/s/1kRaBY2C85ftXS0_JPe_M-w

向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

AI