Humanoid 實例用於創建角色模型,用於用戶虛擬人偶和 NPC。當內含名為 頭部 的零件的 時, Roblox 在該部分上方顯示名稱和/或生命條。

通過各種 Humanoid 屬性,您可以修改以追蹤中內容:
- 用戶可以從 距離 看到其他人形對自己角色人形的名稱/生命值的距離。
- 顯示在人形上的 顯示名稱,該名稱顯示在人形上。
- 無論是否存在人形生物的 生命條,永遠不出現,或只在人形生物受到傷害時出現。
- 無論名稱和生命條是否被隱藏(隱藏),當攝影機與另一個人形怪物之間的視線被阻擋時。
顯示屬性
顯示距離類輸入
Humanoid.DisplayDistanceType 屬性設置了使用者如何查看其他角色的名稱/生命值與自己角色相關。
檢視器
當人形的 DisplayDistanceType 設為 HumanoidDisplayDistanceType.Viewer 時,它會看到自己 NameDisplayDistance 和 HealthDisplayDistance 範圍內的其他人形的名稱/生命值。你可以將此視為最低優先級,因為它不會被用於其他配置為 主題 或 無 的人形被考慮。
在下列情況下,使用者的角色( 觀看者 )的字元有比HealthDisplayDistance大的NameDisplayDistance,如指示圈所示。因結果,使用者會看到 監視者 和 奧卡維亞 的角色名稱,但只看到 監視者 的生命條。

主題
當人形的 DisplayDistanceType 設為 HumanoidDisplayDistanceType.Subject 時,它會取得 完全控制 自己的名稱和生命顯示通過其 NameDisplayDistance 和 HealthDisplayDistance 值。有效地,其他人形只會在那些距離從 主題 人形到主題的名稱/健康內看到主題的名稱/健康。
在下列情況下, 監視者 和 Octavia 皆設為 主題 ,其NameDisplayDistance被圓圈所指示。只有名稱 歐卡維亞 被其角色站在她的範圍內但超出 監視者 人形範圍的用戶看到。

無
當人形的 DisplayDistanceType 設為 HumanoidDisplayDistanceType.None 時,其名稱和生命條在任何情況下都不會出現。在下列情況下, 監視者 和 Octavia 皆設為 無 ,因此其他角色在範圍內時也無法看到名稱或生命值。

生命顯示類輸入
Humanoid.HealthDisplayType 屬性提供進一步控制字元的健康條顯示。條棒反映了人形的 Health 作為其 MaxHealth 的因子,並且隨著人形的健康下降,從綠色變為黃色,再變為紅色。
永遠開啟
當人形的 HealthDisplayType 設為 HumanoidHealthDisplayType.AlwaysOn 時,其生命條總是會出現。

受損時顯示
只有 HealthDisplayType 設為 HumanoidHealthDisplayType.DisplayWhenDamaged 的人形只會顯示生命條當其 Health 小於其 MaxHealth 時。在下列情況下, 監視者 擁有完整的健康狀況,並不會顯示健康條,但 Octavia 受到50%傷害,並顯示黃色的健康條。

永遠關閉
當人形的 HealthDisplayType 設為 HumanoidHealthDisplayType.AlwaysOff 時,其生命條在任何情況下都不會出現。

遮蓋
將人形名稱隱藏在牆壁或其他物體後面的遮蓋控制由角色的 Humanoid.NameOcclusion 屬性來控制。
無閉塞
當人形被隱藏在可見物體後面,且其 NameOcclusion 設為 NameOcclusion.NoOcclusion 時,其名稱和生命值永遠不會被人形從視覺中隱藏。
在下列情況下, 監視者 和 Octavia 皆設為 NoOcclusion 。雖然兩者都足夠隱藏在石柱後,但查看人偶仍然可以看到他們的名稱/生命顯示。

包含所有
當人形被隱藏在可見物體後面,且其 NameOcclusion 設為 NameOcclusion.OccludeAll 時,其名稱和生命值總是被人形從視覺中隱藏。
在下列情況下, 監視者 和 Octavia 兩者都足夠隱藏在石柱後面。 監視者 設為 OccludeAll ,因此其名稱和健康狀況將隱藏於監視人形。 Octavia ,卻設為NoOcclusion,她的名稱/健康狀況仍對查看的人形可見。

敵方遮蔽
當人形被隱藏在可見物體後,且其 設為 時,其名稱和生命值只對敵人人形(不同的 玩家)隱藏,而不對其他人形(玩家在不同的 )隱藏。
在下列情況下, 監視者 和 歐卡維亞 兩者都足夠隱藏在石柱後面,兩者都設為 敵方隱閉 。查看人形和觀察者在同一中,因此名稱/生命障礙不會發生。但是,對方團隊的名稱和生命值 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 角色的 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)