创建 3D GUI 元素
问题
当希望创建角色头顶生命栏或人物名等自定义 3D GUI
时,请参考下列代码:
解决方案
使用 3DUIBillboard
作为容器,而不使用 StarterGui
。
game.getService("Players").LocalPlayer.Character and game.getService("Players").Character:findFirstChild('Head')
script.Parent.Adornee = game.getService("Players").LocalPlayer.Character.Head
script.Parent.TextLabel.Text = string.reverse(game.getService("Players").LocalPlayer.Name)
讨论
在 WorkSpace
中创建一个 3DUIBillboard
(同步显示给其它玩家),并在其中放置 UITextLabel
和 LocalScript
。3DUIBillboard
Size2D
属性应设置为 {1, 1}。
在我们的脚本中可以用到先前提过的一些 LocalScript
快捷方式。想要获得 Player
目录时,不必使用 script.Parent.Parent.Parent
,只需要用 game.getService("Players").LocalPlayer
即可。我们等到 LocalPlayer
(正在使用 StarterGui
的用户)拥有 Character
和 Head
后,把 3DUIBillboard
的 Adornee
设置为该 Head
对象。 下面,我们设置 UITextLabel
,将其文本设置为 LocalPlayer
新文本的反向。
这样做的结果是,反转过来的名字会在头顶出现。注意,所有的 StarterGui
都是本地的,只会出现在正在使用 StarterGui
的 Player
处。因此,悬浮在自己头顶上的文本,只有自己可见。其他玩家会看到他们的名字反向悬浮在其头顶,但无法看到其他人的。
另外还需注意的是,在撰写这段介绍的时间点,
3DUIBillboard
仍处于开发阶段。因此,它可能会存在有 bug。其中之一是:StarterGui中创建3DUI会不生效。