mesh渲染到ui_在Unity中使用UGUI修改Mesh绘制几何图形
Used by?Text,?Image, and?RawImage?for example to generate vertices specific to their use case.
說的是當(dāng)該控件(例如Text,Image,RawImage)需要改變頂點(diǎn)的時候,就會自動調(diào)用。
在傳入的vh參數(shù)里修改頂點(diǎn),三角形,UV等,同樣可以達(dá)到修改mesh的目的。
不過該函數(shù)是只有在該Craphic組件需要修改的時候才會調(diào)用,比如你修改Image的大小,或者它加載的時候才會。
這樣就導(dǎo)致我們沒法及時看到我們對mesh的修改,比如用是將一張Image的四個角分別用四個對象表示,這四個對象的
移動,會讓這種Image發(fā)生形變。但是沒法及時更新就沒辦法了。
還好有SetNativeSize()這個方法,其實(shí)跟刷新差不多。
注:新發(fā)現(xiàn),UGUI采用臟標(biāo)記系統(tǒng),只要控件被標(biāo)記為“臟”狀態(tài),就會強(qiáng)制刷新一遍,在每次改變了頂點(diǎn)或者紋理后,調(diào)用SetVerticesDirty() 或?SetMaterialDirty()即可。
上代碼:
// 自己手動刷新
void Update()
{
//SetNativeSize();
SetVerticesDirty();
}
protected override voidOnPopulateMesh(VertexHelper vh)
{Color32 color32=color;
vh.Clear();
// 這里我用5對GameObject的坐標(biāo)來與該Image對象的五個頂點(diǎn)綁定起來
// AddVert的最后一個參數(shù)是UV值
vh.AddVert(pos[0].position, color32, newVector2(0f, 0f));
vh.AddVert(pos[1].position, color32, newVector2(0f, 1f));
vh.AddVert(pos[2].position, color32, newVector2(1f, 1f));
vh.AddVert(pos[3].position, color32, newVector2(1f, 0f));
vh.AddVert(pos[4].position, color32, new Vector2(0.5f, 0f));
vh.AddTriangle(0, 1, 2);
vh.AddTriangle(2, 3, 4);
vh.AddTriangle(2, 4, 0);
}
注:Unity4.6的UGUI, 并不是用OnPopulateMesh來改變頂點(diǎn),而是用OnFillVBO,用法基本相同,不同的是,4.6的UI的mesh是基于Quad而不是三角形,因此不用像上面那樣設(shè)置完
頂點(diǎn)后,還需要設(shè)置三角形。但注意的是,Quad跟三角形不同的地方就是,它是由4個頂點(diǎn)組成的,因此設(shè)置的頂點(diǎn)數(shù)必須是4的倍數(shù)。設(shè)置Quad的時候,只需要4個一組的設(shè)置面片即可。
相比較三角形,Quad的概念容易理解,但是頂點(diǎn)的利用率大大降低,比如上面的5邊形,用三角形只需要5個頂點(diǎn),但用Quad則需要8個頂點(diǎn)。
做法3:
想起我之前為了讓Text實(shí)現(xiàn)漸變效果寫的一個擴(kuò)展方法,就是創(chuàng)建一個組件腳本,這個組件繼承BaseMeshEffect,
然后在里面覆寫ModifyMesh(Mesh mesh)方法,在該方法內(nèi)部實(shí)現(xiàn)修改mesh即可。
最新的5.3版已經(jīng)將該方法改成ModifyMesh(VertexHelper vh)(又TM改,我印象中這是第三次改了)
作用以及寫法幾乎與第二點(diǎn)一樣,只是不用繼承Graphic組件,這樣可以實(shí)現(xiàn)比較好的擴(kuò)展性。把效果做成Effect,
然后所有Graphic組件都可以通過添加該組件來實(shí)現(xiàn)擴(kuò)展。
參考文章:
總結(jié)
以上是生活随笔為你收集整理的mesh渲染到ui_在Unity中使用UGUI修改Mesh绘制几何图形的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python利用自动识别写模块_教你用P
- 下一篇: android炫酷叼ui,XUI: 一个