Humanoid 实例用于创建角色模型,既适用于用户虚拟形象也适用于 NPC。当一个 包含一个名为 头部 的部分时, Roblox 在那个部分上方显示一个名称和/或健康条。

通过各种 Humanoid 属性,您可以修改以关注中/正在关注内容:
- 用户可以从 距离 看到其他人形对自己角色人形的名字/生命值的距离。
- 显示在一个人形上的 显示名称,该名称显示在一个人形上。
- 无论一个人形怪物的 生命条 是否始终显示、从不显示或仅在人形怪物受损时显示。
- 无论名称和生命条是否被隐藏(隐藏)(当镜头和另一个人形怪物之间的视线被阻塞时),当镜头和另一个人形怪物之间的视线被阻塞时。
显示属性
显示距离类输入
Humanoid.DisplayDistanceType 属性设置了用户如何看待其他角色与自己角色的名称/生命值关系。
观察者
当一个人形的 DisplayDistanceType 设置为 HumanoidDisplayDistanceType.Viewer 时,它可以看到自己 NameDisplayDistance 和 HealthDisplayDistance 范围内其他人形的名称/生命值。你可以将此视为最低优先级,因为它不会被用于其他配置为 主题 或 无主题 的人形被考虑。
在以下场景中,用户的角色(视图器)的大小比视窗大,如图所示。因结果,用户看到了 Watchman 和 Octavia 的角色名称,但只看到了 Watchman 的健康条。

主题
当一个人形的 DisplayDistanceType 设置为 HumanoidDisplayDistanceType.Subject 时,它需要 完全控制 自己的名称和生命显示通过其 NameDisplayDistance 和 HealthDisplayDistance 值。实际上,其他人形只能在那些距离 主题 人形的范围内看到主题的名称/生命值。
在以下场景中, 守望者 和 奥克塔维亚 都设置为 主题 ,其NameDisplayDistance由圆圈表示。只有名称 奥克塔维亚 被其角色站在其范围内但超出 守望者 人形范围的用户看到。

无
当一个人形怪物的 DisplayDistanceType 设置为 HumanoidDisplayDistanceType.None 时,其名称和生命条在任何情况下都不会出现。在以下场景中, Watchman 和 Octavia 都设置为 无 ,因此其他角色在范围内时也无法看到名字或生命值。

生命显示类输入
Humanoid.HealthDisplayType 属性提供进一步控制角色的健康条显示。该条反映了人形的 Health 作为其 MaxHealth 的因素,并且随着人形的健康下降,颜色从绿色变为黄色,再变为红色。
始终在线
当一个人形怪物的 HealthDisplayType 设置为 HumanoidHealthDisplayType.AlwaysOn 时,其生命条总是会出现。

受损时显示
一个具有 HealthDisplayType 设置为 HumanoidHealthDisplayType.DisplayWhenDamaged 的人形只显示生命条当其 Health 小于其 MaxHealth 时在以下场景中, 守望者 拥有完整的生命值且不显示生命值条,但 奥克塔维亚 受到 50% 伤害并显示黄色生命值条。

始终关闭
当一个人形怪物的 HealthDisplayType 设置为 HumanoidHealthDisplayType.AlwaysOff 时,其生命条在任何情况下都不会出现。

封闭
人形名称在墙壁或其他对象后的隐藏(遮蔽)由角色的 Humanoid.NameOcclusion 属性控制。
无闭塞
当一个人形怪物被隐藏在可见对象后面,其 NameOcclusion 设置为 NameOcclusion.NoOcclusion 时,其名称和生命永远不会被人类形怪物查看。
在以下场景中, both 守望者 和 Octavia 都设置为 NoOcclusion 。虽然两者都足够隐藏在石柱后,但观察人形仍然可以看到他们的名称/生命显示。

包含所有
当一个人形怪物被隐藏在可见对象后面,其 NameOcclusion 设置为 NameOcclusion.OccludeAll 时,其名称和生命值始终被隐藏从查看人形怪物。
在以下场景中, both 守望者 和 奥克塔维亚 都足够隐藏在石柱后面。 守望者 设置为 OccludeAll ,因此其名称和健康状况隐藏于观察人形。 奥克塔维亚 ,但设置为没有遮蔽,她的名字/生命仍然可以看到视觉人形。

敌人遮蔽
当一个人形怪物被隐藏在可见对象后面,其NameOcclusion设置为NameOcclusion.EnemyOcclusion时,其名称和生命只对敌人的人形怪物(不同的Team玩家)被隐藏。
在以下场景中, 守望者 和 奥克塔维亚 都被隐藏在石柱后足够,两者都设置为 敌人遮蔽 。观察人形和守望者在同一个上,因此名称/生命封锁不会发生。然而,对方团队的名称和生命值 Octavia 被隐藏。

修改角色显示
用户虚拟形象
要修改体验中每个进入的虚拟形象的名称或生命显示,请在 Players.PlayerAdded 和 Player.CharacterAdded 事件中连接 Script 并设置 显示属性 在角色的 Humanoid 上。
脚本 - 全球自定义
local Players = game:GetService("Players")
local function onPlayerAdded(player)
player.CharacterAdded:Connect(function(character)
local humanoid = character:FindFirstChildWhichIsA("Humanoid")
if humanoid then
-- 给每个人形全部控制其名称/生命显示距离
humanoid.DisplayDistanceType = Enum.HumanoidDisplayDistanceType.Subject
-- 将名称显示距离设置为 20 格
humanoid.NameDisplayDistance = 20
-- 将生命条显示距离设置为 15 格
humanoid.HealthDisplayDistance = 15
-- 仅在人形被损坏时显示生命条
humanoid.HealthDisplayType = Enum.HumanoidHealthDisplayType.DisplayWhenDamaged
end
end)
end
Players.PlayerAdded:Connect(onPlayerAdded)
您还可以根据玩家的 Team 自定义属性,例如将所有“守卫”玩家设置为通用名称,并隐藏所有“忍者”玩家的名称。
脚本 - 团队自定义
local Players = game:GetService("Players")
local function onPlayerAdded(player)
player.CharacterAdded:Connect(function(character)
local humanoid = character:FindFirstChildWhichIsA("Humanoid")
if humanoid then
-- 将所有保安的名称设置为通用“保安”
if player.Team.Name == "Guards" then
humanoid.DisplayName = "Guard"
-- 隐藏所有忍者的名称
elseif player.Team.Name == "Ninjas" then
humanoid.DisplayDistanceType = Enum.HumanoidDisplayDistanceType.None
end
end
end)
end
Players.PlayerAdded:Connect(onPlayerAdded)
NPC 角色
对于已放置在 3D 世界中的 NPC 角色,您可以在 属性窗口 中直接编辑名称/生命值。


覆盖显示名称
默认情况下,一个人形显示名称与用户的 Roblox 帐户匹配 显示名称 ,这是独一无二且与他们的帐户分开的 用户名 。要显示与用户帐户无关的完全自定义名称,您可以覆盖 Humanoid.DisplayName 属性。
直接设置
您可以通过 DisplayName 设置任何 Humanoid 实例的 Script 属性,例如 团队自定义 示例,或直接在 NPC 角色的 人形对象 上。
通过用户输入设置
在一些角色扮演或战格斗等类型中,您可能想为用户提供输入自己角色名称、宠物角色名称等的方法。这与体验无关,不捆绑到他们的帐户显昵称。您可以通过 TextBox 名称输入在客户端收集此输入。

一旦输入提交,您可以通过 远程事件 将其传递给服务器,然后,在服务器端,监听远程事件并将 过滤 名称分配给用户角色的 Humanoid。
本地脚本 - 发射远程事件
local ReplicatedStorage = game:GetService("ReplicatedStorage")local changeNameEvent = ReplicatedStorage:WaitForChild("ChangeNameEvent")changeNameEvent:FireServer("Amory")
脚本 - 分配过滤名称
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local TextService = game:GetService("TextService")
-- 创建远程事件以接收客户端的文本进行筛选
local changeNameEvent = Instance.new("RemoteEvent")
changeNameEvent.Name = "ChangeNameEvent"
changeNameEvent.Parent = ReplicatedStorage
local function onRequestNameChange(player, newName)
local character = player.Character
local humanoid = character:FindFirstChildWhichIsA("Humanoid")
local filterResult
local success, errorMessage = pcall(function()
filterResult = TextService:FilterStringAsync(newName, player.UserId)
end)
if success then
local filteredName
local success, errorMessage = pcall(function()
filteredName = filterResult:GetNonChatStringForBroadcastAsync()
end)
if success and humanoid then
humanoid.DisplayName = filteredName
end
end
end
changeNameEvent.OnServerEvent:Connect(onRequestNameChange)