修改自
在原文的基礎上增加了居中對齊和右對齊,與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...