我正在尝试制作一个自定义消息框,以显示角色在整个游戏过程中所说的文字。我试图通过这段代码来实现这个目标:
[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)
问题是如果我调用它,会出现没有文字的空边框。我该如何解决这个问题?我可以改进这个脚本吗?
答案 0 :(得分:1)
我要做的第一件事就是找出问题所在。是否创建了文本?它实际出现在哪里?运行游戏,查看游戏对象视图,看看这些对象发生了什么。
我的第二个观察是你可能希望文本成为边框的父级。这允许边框充分管理文本及其布局。他们应该一起去。
最后,看一下LayoutGroups。如果你的边框有一个布局组,那么它应该调整它的大小(或调整它的子项的大小)以匹配你想要的文本。