Humanoid 實例用於創建角色模型,適用於用戶頭像和 NPC。當 Humanoid 位於包含名為 Head 的部分的 Model 中時,Roblox 會在該部分上方顯示名稱和/或血量條。

通過各種 Humanoid 屬性,您可以修改以下內容:
- 用戶可以在距離其自身角色的 humanoid 範圍內看到其他 humanoid 的名稱/血量的 距離。
- 在 humanoid 上方顯示的 顯示名稱。
- humanoid 的 血量條 是否始終出現、從不出現,或僅在 humanoid 受損時出現。
- 當相機與另一個 humanoid 之間的視線被阻擋時,名稱和血量條是否被 遮擋(隱藏)。
顯示屬性
顯示距離類型
Humanoid.DisplayDistanceType 屬性設置用戶在其自身角色的關係中如何看到其他角色的名稱/血量。
查看者
當 humanoid 的 DisplayDistanceType 設置為 HumanoidDisplayDistanceType.Viewer 時,它可以在其自身 NameDisplayDistance 和 HealthDisplayDistance 的範圍內看到其他 humanoid 的名稱/血量。您可以將其視為最低優先級,因為不考慮其他配置為 主體 或 無 的 humanoid。
在下面的情境中,用戶的角色(查看者)的 NameDisplayDistance 大於 HealthDisplayDistance,如圓圈所示。因此,該用戶可以看到 Watchman 和 Octavia 的角色名稱,但只能看到 Watchman 的血量條。

主體
當 humanoid 的 DisplayDistanceType 設置為 HumanoidDisplayDistanceType.Subject 時,它通過其 NameDisplayDistance 和 HealthDisplayDistance 值完全控制其自身的名稱和血量顯示。實際上,其他 humanoid 只會在該 主體 humanoid 的距離內看到主體的名稱/血量。
在下面的情境中,Watchman 和 Octavia 都設置為 主體,他們的 NameDisplayDistance 範圍由圓圈指示。只有名稱 Octavia 被站在她範圍內的用戶所看到,但 Watchman humanoid 的範圍之外。

無
當 humanoid 的 DisplayDistanceType 設置為 HumanoidDisplayDistanceType.None 時,其名稱和血量條在任何情況下都不會顯示。在以下情景中,Watchman 和 Octavia 都設置為 無,因此另一角色即使在範圍內也看不到他們的名稱或血量。

血量顯示類型
Humanoid.HealthDisplayType 屬性提供了對角色血量條可見性的進一步控制。該條反映 humanoid 的 Health 作為其 MaxHealth 的一個因素,並且隨著 humanoid 血量的減少,顏色從綠色變為黃色再變為紅色。
始終顯示
當 humanoid 的 HealthDisplayType 設置為 HumanoidHealthDisplayType.AlwaysOn 時,其血量條始終出現。

受損時顯示
當 humanoid 的 HealthDisplayType 設置為 HumanoidHealthDisplayType.DisplayWhenDamaged 時,只有當其 Health 低於其 MaxHealth 時才顯示血量條。在以下情況中,Watchman 具有滿血量並且不顯示血量條,但 Octavia 受損50%,並顯示黃色血量條。

始終隱藏
當 humanoid 的 HealthDisplayType 設置為 HumanoidHealthDisplayType.AlwaysOff 時,其血量條在任何情況下都不會顯示。

遮擋
humanoid 名稱被牆壁或其他物體遮擋的控制由角色的 Humanoid.NameOcclusion 屬性來控制。
無遮擋
當 humanoid 隱藏在可見物體後面,且其 NameOcclusion 設置為 NameOcclusion.NoOcclusion 時,其名稱和血量永遠不會被隱藏。
在以下情況中,Watchman 和 Octavia 都設置為 無遮擋。儘管他們都被石柱充分遮擋,但視圖中的 humanoid 仍然可以看到他們的名稱/血量顯示。

遮擋所有
當 humanoid 隱藏在可見物體後面,且其 NameOcclusion 設置為 NameOcclusion.OccludeAll 時,其名稱和血量永遠會被隱藏。
在以下情況中,Watchman 和 Octavia 都被石柱充分遮擋。 Watchman 設置為 遮擋所有,因此其名稱和血量對於視圖中的 humanoid 隱藏。然而,Octavia 設置為 無遮擋,她的名稱/血量對於視圖中的 humanoid 仍然可見。

敵人遮擋
當 humanoid 隱藏在可見物體後面,且其 NameOcclusion 設置為 NameOcclusion.EnemyOcclusion 時,其名稱和血量僅對敵人 humanoid(在不同 Team 的玩家)遮擋。
在以下情境中,Watchman 和 Octavia 都被石柱充分遮擋,且均設置為 敵人遮擋。視圖中的 humanoid 和 Watchman 在同一 Team,因此不會發生名稱/血量遮擋。然而,Octavia 的名稱和血量被對方隊伍所遮擋。

修改角色顯示
用戶頭像
要修改遊戲中每個進入的頭像的名稱或血量顯示,請在 Script 中連接 Players.PlayerAdded 和 Player.CharacterAdded 事件,並在角色的 Humanoid 上設置 顯示屬性。
local Players = game:GetService("Players")
local function onPlayerAdded(player)
player.CharacterAdded:Connect(function(character)
local humanoid = character:FindFirstChildWhichIsA("Humanoid")
if humanoid then
-- 給每個 humanoid 完全控制其名稱/血量顯示距離
humanoid.DisplayDistanceType = Enum.HumanoidDisplayDistanceType.Subject
-- 設置名稱顯示距離為 20 studs
humanoid.NameDisplayDistance = 20
-- 設置血量條顯示距離為 15 studs
humanoid.HealthDisplayDistance = 15
-- 只有在 humanoid 受損時才顯示血量條
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 屬性。
直接設置
您可以設置任意 Humanoid 實例的 DisplayName 屬性,通過 Script 獲取引用,例如上面的 隊伍自訂 示例,或直接在 NPC 角色的 Humanoid 對象上設置。
通過用戶輸入設置
在某些類型的遊戲中,例如角色扮演或戰鬥,您可能希望提供一種方法讓用戶輸入自己的角色名稱、寵物角色名稱等,這些名稱與其帳戶顯示名稱無關。您可以通過一個 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)