Class.Humanoid 实例用于创建角色模型,用于用户虚拟形象和 NPC 。当 Humanoid 存在于 Model 中时,Roblox 会在该部分上显示一个名为 1> 头部1> 的名称和/或健康条。
通过各种 Humanoid 属性,您可以修改以关注中/正在关注内容:
- 用户可以从 距离 从其他人形的名称/健康与其自己角色的人形相关。
- 显示在一个人形上的 显示名称 。
- 是否出现人形的生命条,总是出现,从来不出现或只出现在人形受到伤害时。
- 当线 of 视野 在相邻的人形之间被 隐藏 时,是否会导致名称和健康栏显示为occluded(隐藏)。
显示属性
显示距离类型
Class.Humanoid.DisplayDistanceType 属性设置用户在自己的角色与其他角色的关系中查看其他角色的名称/健康。
查看器
当人形的 DisplayDistanceType 设置为 HumanoidDisplayDistanceType.Viewer 和 Class.Humanoid
在下面的场景中,用户的角色 ( 视图器 ) 的 NameDisplayDistance 比 HealthDisplayDistance 大,如图所示。因结果,用户看到 1> 看守人员 </
主题
当人形的 DisplayDistanceType 设置为 HumanoidDisplayDistanceType.Subject 时,它取得
在下面的场景中,既然 守护者 和 奥克塔维亚 都设置为 主题 ,其 2> Class.Humanoid.NameDisplayDistance|NameDisplayDistance2> 范围由圆圈表示。仅仅 5> 奥克塔维亚 5> 的名称才能让用户看到
无
当人形的 DisplayDistanceType 设置为 HumanoidDisplayDistanceType.None 时,其名称和健康条不会在任何情况下出现。在下面的场景中,Watchman 和 Octavia 都设置为 无
健康显示类型
Class.Humanoid.HealthDisplayType 属性提供进一步控制角色的健康条可见度。 条反射人形的 Health 作为其 MaxHealth 的因素,并且改变绿色到黄色到红色,因为人形的健康会降低。
总是开
当人形的 HealthDisplayType 设置为 HumanoidHealthDisplayType.AlwaysOn 时,其健康条总是显示。
显示受伤时
一个类似人形的人形,其HealthDisplayType设置为HumanoidHealthDisplayType.DisplayWhenDamaged只显
总是关闭
当人形的 HealthDisplayType 设置为 HumanoidHealthDisplayType.AlwaysOff 时,其健康条在任何情况下都不会显示。
闭锁
人形名称在墙壁或其他物体后的隐藏(控制)是通过角色的 Humanoid.NameOcclusion 属性来实现的。
不Ocклю
当一个人形被隐藏在可见对象后,其 NameOcclusion 设置为 NameOcclusion.NoOcclusion ,其名称和健康从视角人形永远不会被隐藏。
在下面的场景中, Watchman 和 Octavia 都设置为 NoOcclusion 。虽然两者都隐藏在石柱后,但视频人形仍然可以看到它们的名称/健康显示。
包括所有
当一个人形被隐藏在可见对象后,其 NameOcclusion 设置为 NameOcclusion.OccludeAll ,其名称和健康总是从查看人形隐藏。
在下面的场景中,Watchman和Octavia都已经足够隐藏在石柱后面。Watchman设置为1>OccludeAll1>,因此其名称和健康都是隐藏在视图人形下面的。Octavia设置为4>NoOcclusion4>,因此其名称/健康都是显示给视觉人形看的。
敌人Ocклю
当人形被隐藏在可见对象后,其 NameOcclusion 设置为 NameOcclusion.EnemyOcclusion ,其名称和健康只是在不同的 Team 上的玩家隐藏 (玩家在不同的 2>Class.Team2> 上使用).
在下面的场景中,Watchman和Octavia都已经足够隐藏在石柱后,两者都设置为 敌人闭闭 。 视图人形和Watchman都在同一 1>Class.Team1>上,因此不会发生名称/健康 occlusion。 但名称和健康的Octavia在对方团队伍上,
修改角色显示
用户虚拟形象
要修改每个进入体验的虚拟形象的名称或健康显示,请连接 Players.PlayerAdded 和 Player.CharacterAdded 事件在 Script 中,并在角色的 1> Class.Humanoid1> 上设置4>显示属性4>。
脚本 - 全球自定义
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
-- 将所有保安的名称设置为“Guard”
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 角色,您可以在 Humanoid 对象上直接编辑名称/健康。
覆盖显示名称
默认情况下,人形的显示名称与用户的 Roblox 帐户 显示名称 匹配,这是独一无二的且与用户帐户 用户名 独立的。要显示与用户帐户无关的全新名称,您可以覆盖 Humanoid.DisplayName 属性。
直接设置
您可以通过 DisplayName 属性设置任何 Humanoid 实例的所有权,例如团队 Script 示例,或直接在 1>NPC1>角色的 4>Humanoid4> 对象上。
通过用户输入设置
在一些角色扮演或战格斗类型的游戏中,您可能需要为用户输入自己的角色名称、宠物角色名称等,这与体验无关。您可以通过客户端端口中的一个 TextBox 名昵称输入收集到的输入。
输入提交后,您可以通过<a href=\"#RemoteEvent\">远程事件</a>将其传递给服务器,然后,在服务器端,您可以听到远程事件并为用户角色的<a href=\"#FilteredName\">过滤器</a>命名。
本地脚本 - 火焰远程事件
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)