角色名稱/生命值顯示

*此內容是使用 AI(Beta 測試版)翻譯,可能含有錯誤。若要以英文檢視此頁面,請按一下這裡

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

Character display information above an in-experience avatar

通過各種 Humanoid 屬性,您可以修改以追蹤中內容:

  • 用戶可以從 距離 看到其他人形對自己角色人形的名稱/生命值的距離。
  • 顯示在人形上的 顯示名稱,該名稱顯示在人形上。
  • 無論是否存在人形生物的 生命條,永遠不出現,或只在人形生物受到傷害時出現。
  • 無論名稱和生命條是否被隱藏(隱藏),當攝影機與另一個人形怪物之間的視線被阻擋時。

顯示屬性

顯示距離類輸入

Humanoid.DisplayDistanceType 屬性設置了使用者如何查看其他角色的名稱/生命值與自己角色相關。

檢視器

當人形的 DisplayDistanceType 設為 HumanoidDisplayDistanceType.Viewer 時,它會看到自己 NameDisplayDistanceHealthDisplayDistance 範圍內的其他人形的名稱/生命值。你可以將此視為最低優先級,因為它不會被用於其他配置為 主題 的人形被考慮。

在下列情況下,使用者的角色( 觀看者 )的字元有比HealthDisplayDistance大的NameDisplayDistance,如指示圈所示。因結果,使用者會看到 監視者奧卡維亞 的角色名稱,但只看到 監視者 的生命條。

主題

當人形的 DisplayDistanceType 設為 HumanoidDisplayDistanceType.Subject 時,它會取得 完全控制 自己的名稱和生命顯示通過其 NameDisplayDistanceHealthDisplayDistance 值。有效地,其他人形只會在那些距離從 主題 人形到主題的名稱/健康內看到主題的名稱/健康。

在下列情況下, 監視者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.PlayerAddedPlayer.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)