Unity UGUI控制text文字間距
Unity ugui相比ngui,提供的功能少之又少,好多特性得需要自己實(shí)現(xiàn)。真不知道unity寫(xiě)這個(gè)插件后來(lái)是不是就沒(méi)有更新過(guò)。發(fā)了句牢騷。如果我想控制文字的顯示間距,ngui 有兩種辦法。1:文字之間加空格。2:調(diào)節(jié)spacing 的x值。
但對(duì)于ugui,第二種方法卻沒(méi)有。以前我使用ngui,這種方法用的多了,也方便,因此很想也把它這個(gè)特性轉(zhuǎn)到ugui上。
思考了半天,最終想出來(lái)了解決方法,以下是實(shí)現(xiàn)方式:
1、定義擴(kuò)展效果類(lèi)
[RequireComponent(typeof(Text))] public class Spacing : BaseMeshEffect { }
2、添加行間距,列間距(Text的行間距廢掉不用了),緩存頂點(diǎn)信息
[SerializeField] private float spacing_x; [SerializeField] private float spacing_y; private List<UIVertex> mVertexList;
3、獲取相關(guān)文字的頂點(diǎn)信息數(shù)組,通過(guò)每六個(gè)定點(diǎn)信息代表一個(gè)文字來(lái)判斷列數(shù)。通過(guò)定點(diǎn)信息的橫坐標(biāo)來(lái)判斷行數(shù)(這個(gè)想了半天才找出的解決方案。我先試的縱坐標(biāo),結(jié)果卻不那么好用,大伙把頂點(diǎn)的值打出來(lái)就明白了)。這樣通過(guò)修改文字的頂點(diǎn)的位置信息據(jù)解決了。下面是具體的實(shí)現(xiàn):
public override void ModifyMesh(VertexHelper vh) { if(spacing_x == 0 && spacing_y == 0) { return; } if (!IsActive()) { return; } int count = vh.currentVertCount; if (count == 0) { return; } if (mVertexList == null) { mVertexList = new List<UIVertex>(); } vh.GetUIVertexStream(mVertexList); int row = 1; int column = 2; List<UIVertex> sub_vertexs = mVertexList.GetRange(0, 6); float min_row_left = sub_vertexs.Min(v => v.position.x); int vertex_count = mVertexList.Count; for (int i = 6; i < vertex_count;) { if (i % 6 == 0) { sub_vertexs = mVertexList.GetRange(i, 6); float tem_row_left = sub_vertexs.Min(v => v.position.x); if (tem_row_left <= min_row_left) { min_row_left = tem_row_left; ++row; column = 1; //continue; } } for(int j=0;j<6;j++) { UIVertex vertex = mVertexList[i]; vertex.position += Vector3.right * (column - 1) * spacing_x; vertex.position += Vector3.down * (row - 1) * spacing_y; mVertexList[i] = vertex; ++i; } ++column; } vh.Clear(); vh.AddUIVertexTriangleStream(mVertexList); }
把這個(gè)腳本掛上去,修改spceing_x和spacing_y大伙就能看到效果。如果大伙有更好的實(shí)現(xiàn)方式,歡迎大家留言討論,完。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
c# 實(shí)現(xiàn)圓形的進(jìn)度條(ProgressBar)
這篇文章主要介紹了c# 如何實(shí)現(xiàn)圓形的進(jìn)度條(ProgressBar),幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下2021-03-03舊項(xiàng)目升級(jí)新版Unity2021導(dǎo)致Visual?Studio無(wú)法使用的問(wèn)題
在項(xiàng)目開(kāi)發(fā)過(guò)程中,不可避免的會(huì)升級(jí)開(kāi)發(fā)工具。這次我在舊項(xiàng)目版本升級(jí)到新版Unity2021.2.x時(shí),出現(xiàn)Visual?Studio無(wú)法定位等問(wèn)題,這里我給大家分享下解決方法,舊項(xiàng)目升級(jí)新版Unity2021導(dǎo)致Visual?Studio無(wú)法使用的問(wèn)題,需要的朋友可以參考下2021-12-12unity AudioSource播放完聲音后要執(zhí)行的函數(shù)或條件操作
這篇文章主要介紹了unity AudioSource播放完聲音后要執(zhí)行的函數(shù)或條件操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-04-04解決C#中WebBrowser的DocumentCompleted事件不執(zhí)行的實(shí)現(xiàn)方法
本篇文章是對(duì)C#中WebBrowser的DocumentCompleted事件不執(zhí)行解決方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05