Unity自动居中文本

时间:2017-06-21 13:48:02

标签: c# unity3d

我在Unity为孩子们制作拼写游戏。我已经知道了,当点击正确的字母时,字母会突出显示。我无法弄清楚如何在文本字段中快速突出显示特定的字符,所以我只是将常用的文本突出显示在文本后面,并且在单击时将使常规字符消失。现在,我需要将这个文本放在开头的中心,但问题是,只要字符消失,文本就不对齐,就会自动居中。

Screenshot of problem.

有关如何停止进入汽车中心的任何想法?

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++;
        }

3 个答案:

答案 0 :(得分:3)

我的回答将尽力帮助您解决第一个问题:突出显示字符。

我建议你不要复制文字来显示突出显示的字符。相反,请使用rich text

您可以使用color标记围绕它们来更改单个字符的颜色,如下所示:

<color=#ffff00ff>H</color><color=#ffff00ff>E</color>LP

text组件的Text属性中的此字符串会使HE字母变为黄色,而其他字母将保持黑色(或任何颜色选择了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的一部分:)

希望这有帮助,