Unity自定义UI消息框

时间:2016-01-11 15:44:36

标签: c# unity3d

我正在尝试制作一个自定义消息框,以显示角色在整个游戏过程中所说的文字。我试图通过这段代码来实现这个目标:

[SerializeField] public Text PresetText;
[SerializeField] public GameObject PresetBorder;
[SerializeField] public GameObject Canvas;

private Text UIText;

private Text _tempText;
private GameObject _tempBorder;

public static bool TEXT_INPUT;

public string text = "Placeholder.";

void Start ()
{
    _tempBorder = Instantiate(PresetBorder as GameObject);
    _tempBorder.transform.SetParent(Canvas.gameObject.transform, false);


    _tempText = Instantiate(PresetText) as Text;
    _tempText.transform.SetParent(Canvas.gameObject.transform, false);

    UIText = _tempText;
    UIText.text = text;
}
public void SetText ( string _text )
{
    text = "Speech: " + _text;
}
void Update ()
{
    UIText.text = text;
}

...我在虚拟文件中调用了SetText()函数:

public MessageShell m;
void Start ()
{
    m.SetText("Test!");
}

(MessageShell,因为我的代码文件名为MessageShell.cs)

问题是如果我调用它,会出现没有文字的空边框。我该如何解决这个问题?我可以改进这个脚本吗?

1 个答案:

答案 0 :(得分:1)

我要做的第一件事就是找出问题所在。是否创建了文本?它实际出现在哪里?运行游戏,查看游戏对象视图,看看这些对象发生了什么。

我的第二个观察是你可能希望文本成为边框的父级。这允许边框充分管理文本及其布局。他们应该一起去。

最后,看一下LayoutGroups。如果你的边框有一个布局组,那么它应该调整它的大小(或调整它的子项的大小)以匹配你想要的文本。