Unity UGUI字間距控制項

2021-10-10 20:31:32 字數 2291 閱讀 4196

修改自

在原文的基礎上增加了居中對齊和右對齊,與text元件的設定保持一致;修改了換行檢測的邏輯,原文需要在text中手動輸入回車,然後在字串中檢測\n來區分換行,這樣是不支援自動換行的情況的,這種情況下文字會錯位。

檢測自動換行的思路是:6個為一組取出構成乙個字元的三角麵片的所有頂點,計算出矩形中心點的座標,當兩個字元的中心y座標超過1/2的fontsize時,即表示這兩個字元位於不同的行。這種檢測方式對於自動換行和手動換行都支援。

計算矩形中點的方法很簡單,因為這六個點分別位於矩形四個頂點和對角線兩端,直接六個點加和然後除以六即可得到中心點座標了。

using system;

using system.collections;

using system.collections.generic;

using unityengine;

using unityengine.ui;

public class line

}private int _endvertexindex = 0;

/// /// 終點索引

///

public int endvertexindex

}private int _vertexcount = 0;

/// /// 該行佔的點數目

///

public int vertexcount

}public line (int startvertexindex, int length)

}public enum alignment

[addcomponentmenu ("ui/effects/textspacing")]

public class labelspacing : basemesheffect

text text = getcomponent();

if (text == null)

if (text.alignment == textanchor.uppercenter ||

text.alignment == textanchor.middlecenter ||

text.alignment == textanchor.lowercenter) else if (text.alignment == textanchor.upperright ||

text.alignment == textanchor.middleright ||

text.alignment == textanchor.lowerright) else

listvertexs = new list();

vh.getuivertexstream (vertexs);

int indexcount = vh.currentindexcount;

float midposys = getline (vertexs);

int hidechar = midposys.length - text.text.tochararray ().length;

listlinelist = new list();

if (midposys.length > 0)

}linelist.add (new line (linefirst * 6, midposys.length - linefirst - hidechar));

}line lines = linelist.toarray ();

uivertex vt;

for (int i = 0; i < lines.length; i++) else if(_center == alignment.right)

for (int j = lines[i].startvertexindex; j <= lines[i].endvertexindex; j++)

vt = vertexs[j];

vt.position += new vector3 (_textspacing * ((j - lines[i].startvertexindex) / 6) + leftmove, 0, 0);

vertexs[j] = vt;

//以下注意點與索引的對應關係

if (j % 6 <= 2)

if (j % 6 == 4) }}

}private float getline (listvertexs)

ysum = ysum / 6;

ypos.clear ();

ysums.add (ysum);}}

return ysums.toarray ();

}}

Unity UGUI動態生成控制項

一 首先你得先清楚recttransform元件的一些程式控制 1.先得到ugui控制項上面的recttransform元件 recttransform rtr gameobject.getcomponent 2.設定top和bottom值 rtr.offsetmax new vector2 rtr...

Unity UGUI控制項大小適配父容器

需求 需要把ugui控制項的尺寸調整到指定大小,如匹配至設計的解析度。或者說想制定覆蓋全屏的背景。做法 將這個ugui控制項的recttransform元件裡的anchor presets設為預設的最後乙個 右下角 即anchor錨點的4個花瓣分開至匹配父容器,然後把left top right b...

css 設定字間距 字母間距和漢子間距

下面是沒有設定間距的漢字和字母 順昌人 this is a test 下面是設定50px的word spacing字間距 順昌人 this is a test 下面是設定50px的letter spacing字母間距 順 昌 人 t h i s i s a t e s t 重要 letter spa...