超出显示省略号在网页上实现很简单,在unity里就有些麻烦。网上很多都不能用。下面这个是很合适
private void SetTextWithEllipsis(Text textTemp, Vector2 size, string value)
{
var generator = new TextGenerator();
//设置文本绘制范围
var settings = textTemp.GetGenerationSettings(size);
generator.Populate(value, settings);
//设置可见的字符数
var characterVisibleCount = generator.characterCountVisible;
var updateText = value;
//超出部分以省略号显示
if (value.Length > characterVisibleCount)
{
updateText = value.Substring(0, characterVisibleCount - 1);
updateText += "...";
}
textTemp.text = updateText;
}
上面的size就是UGUI上的宽高。
附加:
下面这个是获取文字的坐标
private Vector3 GenerateCaret(Text m_TextComponent, int adjustedPos)
{
TextGenerator gen = m_TextComponent.cachedTextGenerator;
if (gen == null||gen.lineCount == 0)
return m_TextComponent.rectTransform.position;
Vector3 startPosition = Vector3.zero;
if (adjustedPos < gen.characters.Count)
{
UICharInfo cursorChar = gen.characters[adjustedPos];
startPosition.x = cursorChar.cursorPos.x;
}
startPosition.x /= m_TextComponent.pixelsPerUnit;
// TODO: Only clamp when Text uses horizontal word wrap.
//if (startPosition.x > m_TextComponent.rectTransform.rect.xMax)
// startPosition.x = m_TextComponent.rectTransform.rect.xMax;
int characterLine = DetermineCharacterLine(adjustedPos, gen);
startPosition.y = gen.lines[characterLine].topY / m_TextComponent.pixelsPerUnit;
return startPosition + m_TextComponent.rectTransform.position;
}
private int DetermineCharacterLine(int charPos, TextGenerator generator)
{
for (int i = 0; i < generator.lineCount - 1; ++i)
{
if (generator.lines[i + 1].startCharIdx > charPos)
return i;
}
return generator.lineCount - 1;
}
输入文字所在的index,即可获取当前文字的坐标。