我在Unity为孩子们制作拼写游戏。我已经知道了,当点击正确的字母时,字母会突出显示。我无法弄清楚如何在文本字段中快速突出显示特定的字符,所以我只是将常用的文本突出显示在文本后面,并且在单击时将使常规字符消失。现在,我需要将这个文本放在开头的中心,但问题是,只要字符消失,文本就不对齐,就会自动居中。
有关如何停止进入汽车中心的任何想法?
newWord = new StringBuilder (startWord.text);
i = 0;
if (Letter.gameObject.GetComponent<MoveLetter> ().checkIfClicked (startWord.text[i]))
{
newWord [i] = ' ';
startWord.text = newWord.ToString();
Destroy (Letter);
letters.Remove (Letter);
i++;
}
答案 0 :(得分:3)
我的回答将尽力帮助您解决第一个问题:突出显示字符。
我建议你不要复制文字来显示突出显示的字符。相反,请使用rich text
您可以使用color
标记围绕它们来更改单个字符的颜色,如下所示:
<color=#ffff00ff>H</color><color=#ffff00ff>E</color>LP
text
组件的Text
属性中的此字符串会使H
和E
字母变为黄色,而其他字母将保持黑色(或任何颜色选择了Text组件)
这是一个可用于突出显示给定字符串的特定字母的函数:
using System;
// ....
public void Foo()
{
// Give the indices of the letters of the string, starting at 0
GetComponent<UnityEngine.UI.Text>().text = Highlight("HELP", "#ffff00ff", 3, 1, 2);
// Will output :
// H<color=#ffff00ff>E</color><color=#ffff00ff>L</color><color=#ffff00ff>P</color>
}
private string Highlight(string text, string color, params int[] indices)
{
Array.Sort(indices);
for (int i = indices.Length - 1 ; i >= 0; i--)
{
if( indices[i] == text.Length - 1 )
text = String.Format( "{0}<color={1}>{2}</color>", text.Substring(0, indices[i]), color, text[indices[i]] ) ;
else if( indices[i] == 0 )
text = String.Format( "<color={0}>{1}</color>{2}", color, text[indices[i]], text.Substring(1));
else if( indices[i] < text.Length )
text = String.Format( "{0}<color={1}>{2}</color>{3}", text.Substring(0, indices[i]), color, text[indices[i]], text.Substring(indices[i] + 1));
}
return text;
}
答案 1 :(得分:0)
我不确定Shadow是如何工作的(我是新手),但也许你可以尝试在点击时在右边的字母上放置一个Shadow组件,这样可能更容易让它工作。
编辑: 在这里,你可以这样做。 Dunno它的效率如何,但我相信你可以通过某种方式从代码中控制它。添加4个组件并在每个方向投射阴影 http://imgur.com/gD4zs9N
答案 2 :(得分:0)
@Hellium答案是正确的:使用富文本可能是您最好的解决方案。
然而,我现在可以想到另外两种可能性:
保留您的2个文本元素(一个是背景,另一个是叠加)并使用monospaced font:这样背景可能是"HELP"
,而叠加层将是" LP"
1}}(只需确保两者的大小/对齐方式相同)
使用TextMesh Pro现在是Unity的一部分:)
希望这有帮助,