UGUI實現隨意調整Text中的字型間距

2022-09-26 03:06:11 字數 2655 閱讀 6606

ugui中是沒有可以隨意調整字型間的距離的方法,仔細研究一下可以通過控制每個字型的網格頂點位置進行調整字型之間的距離,分析一下最簡單情況:輸入的文字是單行的,且末尾沒有換行符;

unity在unityengine.ui命名空間中定義了乙個basemesheffect抽象類,他提供了乙個抽象方法modifymesh(vertexhelper vh),使得可以輕鬆地獲得text文字中所有字型 的頂點資訊,我們的移動字型的操作將在這裡面進行。vertexhelper類主要是用於提供字型網格資料的工具類;

上述便是掛載testspacingtext指令碼之後的效果圖。下面貼出**

using system.collections;

using system.collections.generic;

using unityengine;

using unityengine.ui;

public class textspacingtest : basemesheffect

if (i % 6 == 4)

} }}

分析**:

1)首先建立乙個字型間距的變數,然後需要繼承basemesheffect類並且實現其中的抽象的方法meshmodify()函式。

2)建立乙個容器從網格資訊生成器vh中將字型的頂點資訊全部載入儲存下來

3)接下來開始遍歷獲取到的頂點,我們知道每個字型是由兩個三角形的組成的網格,字型是顯示在這樣的網格上的,因此每個字型也就對應6個頂點。那麼就開始移動每個頂點就可cpnev以了。

4)移動頂點之後要記得設定uv頂點與頂點索引的對應關係,因為乙個字型網格由兩個三角形組成,那麼就重疊了兩個頂點,故而乙個字型的6個頂點,就只對應4個uv頂點索引,如上**顯示的那樣。

分析如下:

接下來看看比較複雜的情況:

文字的情況為,可以有多行,或單行,單行、多行時末尾均可以有換行符。

核心思路:

1)先考慮僅僅是多行且末尾行的末尾沒有換行符的情況,解決了這個核心問題,再考慮其他的問題。

2)將多行的文字按照換行符進行分割,這樣每一行就形成了乙個字串,此時對每一行進行上面簡單的操作,就可以實現移動的了。

3)考慮到所有的文字的頂點資訊資料都儲存在vh中,可以建立乙個行資料結構line以此來儲存每行的基本屬性(比如:本行開始定點的索引位置,結束頂點的索引位置,所有頂點的數量)。

4)簡單多行的情況,利用上面的分行的思路就可以解決,接下來分析其他的問題。

5)單行時末尾有換行符,我們在分割字串之後要加以判斷是否有空串的情況 ,若有那麼就認為末尾產生了換行符,此時空串不再建立line物件,只用建立乙個line物件。解法看**。

6)多行時末尾有換行符,同樣用於上面一樣的方法進行檢驗,最後乙個空串不在建立line物件,解法看**。

7)之後若是想擴充套件修改字型垂直方向的間距也可以在此基礎上修改,非常簡單。

接下來看**:

using unityengine;

using system.collections;

using unityengine.ui;

using system.collections.generic;

internal class line

} //每行結束頂點索引

private int endvertexindex;

public int endvertexindex }

//每行頂點總量

private int countvertexindex;

public int countvertexindex }

public line(int startvertexindex,int countvertexindex) }

///

/// 這是設定字型移動的核心類

/// 執行多重行移動的核心演算法是:將多重行分開依次進行處理,每一行的處理都是前面對單行處理的子操作

/// 但是由vh是記錄乙個文字中所有的字的頂點,所以說需要分清楚每行開始,每行結束,以及行的字個數,

/// 如此需要建立乙個行的資料結構,以儲存這些資訊

///

public class textspacingmultest : basemesheffect

else

"ls長度" + ls.length);

for (int i = 0; i < line.length; i++)

if (i == 0&&line.length&程式設計客棧gt;=1)//解決單行時有換行符的情況,以及多行時i為0的情況

else

else

else}}

}程式設計客棧

list vertexs = new list();

vh.getuivertexstream(vertexs);

int countvertexindex = vertexs.count;

"頂點總量" + vertexs.count);

for (int i = 0; i < line.length; i++)

for (int k = line[i].startvertexindex+6; k <= line[i].endvertexindex; k++)

if (k % 6 == 4)

www.cppcns.com }

} }}

本文標題: ugui實現隨意調整text中的字型間距

本文位址:

UGUI中隨意調整Text中的字型間距

ugui中是沒有可以隨意調整字型間的距離的方法,仔細研究一下可以通過控制每個字型的網格頂點位置進行調整字型之間的距離,分析一下最簡單情況 輸入的文字是單行的,且末尾沒有換行符 unity在unityengine.ui命名空間中定義了乙個basemesheffect抽象類,他提供了乙個抽象方法modi...

css中需要更小的字型如何實現

我想有很度人都遇到過這種問題,因為瀏覽器對font size的最小值有所限制,例如chrome,當我取值為10以下時,沒有任何變化,直到0時文字消失不見,負值時回到字型原本的樣子,所以我整理了一下瀏覽器對取值的限制以及解決方法 我遇到的是更小字型的解決方法,所以以我為例 span1 p span c...

實現contacts中電話號碼字型變化的效果

聯絡人 contacts 學習一如何實現contacts中 號碼字型變化的效果 效果如下 變化為以下效果 實現方法 1 activity 實現 textwatcher 該 inte ce 2 重寫以下3個方法 private edittext mdigits public void beforete...