Class.Humanoid 實例用於創建人物模型,並且可以用於用戶虛擬人偶和 NPC。當 Humanoid 在 Model 內,內含有名為 1>頭部1> 的一個項目,Roblox 會在該項目上方顯示名稱和/或生命值條。
通過各種 Humanoid 屬性,您可以修改以追蹤中內容:
- 用戶可以從 距離 查看其他人形與自己的角色人形關聯的名稱/健康。
- 顯示名稱,用於顯示超人形。
- 人形的生命值條是否會一直顯示,從來不會顯示或只會顯示人形受損時。
- 當視線隱藏時,是否會有名稱和健康條狀態欄顯示在攝影機和其他人形之間。
顯示屬性
顯示距離類型
Class.Humanoid.DisplayDistanceType 屬性設定用戶在其自己的角色與其他角色的名稱/健康關係時,用戶可以看到哪些資訊。
檢視器
當人形的 DisplayDistanceType 設為 HumanoidDisplayDistanceType.Viewer 和 Class.Humanoid.
在下列場景中,使用者的角色 ( 檢視器 ) 有更大的 NameDisplayDistance 比 HealthDisplayDistance ,指示由圓圈所示。因結果,使用者只能看到
主題
當人形的 DisplayDistanceType 設為 HumanoidDisplayDistanceType.Subject 時,它會對
在下列場景中,將 觀看者 和 奧克提維亞 設置為 對象 和其 1> Class.Humanoid.NameDisplayDistance|NameDisplayDistance1> 範圍由環形表示。只有 4> 奧克蒂維亞
無
當人形體的 DisplayDistanceType 設為 HumanoidDisplayDistanceType.None 時,其名稱和健康狀態條在任何情況下都不會顯示。在下一個場景中, 觀看者
生命值顯示類型
Class.Humanoid.HealthDisplayType 屬性提供進一步控制角色的健康欄顯示狀態。欄子反射人形的 Health 作為其 MaxHealth 的因素,並且改變綠色變成黃色,紅色變成紅色,因為人形的
AlwaysOn
當人形的 HealthDisplayType 設為 HumanoidHealthDisplayType.AlwaysOn 時,其健康狀態欄隨時出現。
受損時顯示
有 HealthDisplayType 設為 HumanoidHealthDisplayType.DisplayWhenDamaged 只會顯示生命值條,當其
永遠關閉
當人形體的 HealthDisplayType 設為 HumanoidHealthDisplayType.AlwaysOff 時,其生命值欄永遠不會在任何情況下顯示。
閉嘴
人形名稱在牆壁或其他物體後隱藏時,會受到 Humanoid.NameOcclusion 角色的屬性控制。
NoOcclusion
當人形隱藏在可見物體後,其 NameOcclusion 設為 NameOcclusion.NoOcclusion ,其名稱和健康狀態從檢視人形時永遠不會隱藏。
在下列場景中, 觀看者 和 奧克提維亞 設置為 NoOcclusion 。雖然兩者都足夠隱藏在石柱後,但觀看人形仍然會看到他們的名稱/健康顯示。
包含所有
當人形隱藏在可見物體後,其 NameOcclusion 設為 NameOcclusion.OccludeAll ,其名稱和健康狀態始終是從查看人形時隱藏的。
在下列場景中,監視者和監視者之間的石柱是足夠地隱藏在石柱後面。 監視者設為 關閉所有 ,因此它的名稱和生命值都隱藏於檢視人形。 監視者設為 不妨礙 ,因
敵人圍閉
當人形隱藏在可見物體後,其 NameOcclusion 設為 NameOcclusion.EnemyOcclusion ,其名稱和健康只是隱藏於不同的 Team 玩家上。
在下列場景中,監視者和Octavia都隱藏在石柱後足夠遠處,並且設為敵方眼睛。 視野人形和監視者都在同一個Class.Team上,因此名稱/健康盲目不會
修改角色顯示
用戶虛擬人偶
要修改每個進入體驗的虛擬人偶的名稱或健康顯示,請連接 Players.PlayerAdded 和 Player.CharacterAdded 事件在 Script 中,並設置 1>顯示屬性1> 在角色的 4>Class.Humanoid4> 上。
指令碼 - 全球自訂
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>人形4> 對物件上,或者在直接在 7>N
設置通過使用者輸入
在某些遊戲類型,例如角色扮演或格鬥,您可能想要提供給用戶輸入自己的角色名稱、寵物角色名稱等,這是與帳號顯示名稱無關的特定體驗。您可以在客戶端通過 TextBox 收集此輸入。
輸入提交後,您可以將它傳送給服務器,通過 遠端事件 將其傳送到服務器,然後,在服務器側聽取遠端事件並為用戶角色的 Class.Humanoid 指定 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)