创建 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 (同步显示给其它玩家),并在其中放置 UITextLabelLocalScript3DUIBillboard Size2D 属性应设置为 {1, 1}。

在我们的脚本中可以用到先前提过的一些 LocalScript 快捷方式。想要获得 Player 目录时,不必使用 script.Parent.Parent.Parent,只需要用 game.getService("Players").LocalPlayer 即可。我们等到 LocalPlayer(正在使用 StarterGui 的用户)拥有 CharacterHead 后,把 3DUIBillboardAdornee 设置为该 Head对象。 下面,我们设置 UITextLabel,将其文本设置为 LocalPlayer 新文本的反向。

这样做的结果是,反转过来的名字会在头顶出现。注意,所有的 StarterGui 都是本地的,只会出现在正在使用 StarterGuiPlayer 处。因此,悬浮在自己头顶上的文本,只有自己可见。其他玩家会看到他们的名字反向悬浮在其头顶,但无法看到其他人的。

另外还需注意的是,在撰写这段介绍的时间点,3DUIBillboard 仍处于开发阶段。因此,它可能会存在有 bug。其中之一是:StarterGui中创建3DUI会不生效。

Last Updated: