Nombre/visualización de la salud del personaje

*Este contenido se traduce usando la IA (Beta) y puede contener errores. Para ver esta página en inglés, haz clic en aquí.

La instancia Humanoid se usa para crear modelos de personajes, tanto para avatares de usuario como para NPCs.Cuando un Humanoid está presente dentro de un Model que contiene una parte llamada Cabeza , Roblox muestra un nombre y/o barra de salud por encima de esa parte.

Character display information above an in-experience avatar

A través de varias propiedades Humanoid, puedes modificar lo siguiendo:

Mostrar propiedades

introducirde distancia de visualización

La propiedad Humanoid.DisplayDistanceType establece cómo los usuarios ven el nombre/salud de otros personajes en relación con su propio personaje.

Vista previa

Cuando el nombre/salud de un humanoide se establece en , ve el nombre/salud de otros humanoides dentro del rango de su propio y .Puedes considerar esto como la prioridad más baja ya que no se tiene en cuenta para otros humanoides configurados como sujeto o ninguno .

En el siguiente escenario, el personaje del usuario ( Mirador ) tiene un tamaño más grande de NameDisplayDistance que HealthDisplayDistance , como se indica con los círculos.Como resultado, el usuario ve nombres de personajes para ambos Watchman y Octavia , pero solo ve una barra de salud para Watchman .

Asunto

Cuando el DisplayDistanceType de un humanoide se establece en HumanoidDisplayDistanceType.Subject , toma control completo sobre su propio nombre y la visualización de su salud a través de sus valores NameDisplayDistance y HealthDisplayDistance.Efectivamente, otros humanoides solo verán el nombre/salud del sujeto dentro de esas distancias desde el sujeto humanoid.

En el siguiente escenario, tanto Watchman como Octavia están configurados como Sujeto y sus rangos NameDisplayDistance se indican con los círculos.Solo el nombre Octavia es visto por el usuario cuyo personaje está dentro de su rango pero fuera del rango del Guardián humanoide.

Ninguno

Cuando el DisplayDistanceType de un humanoide se establece en HumanoidDisplayDistanceType.None, su nombre y barra de salud no aparecen en ningún caso.En el siguiente escenario, tanto Watchman como Octavia están configurados como Ninguno , por lo que el otro personaje no ve su nombre o salud incluso cuando está en rango.

introducirde visualización de salud

La propiedad Humanoid.HealthDisplayType proporciona un control adicional sobre la visibilidad de la barra de salud del personaje.La barra refleja el Health del humanoide como un factor de su MaxHealth y cambia de color de verde a amarillo a rojo a medida que disminuye la salud del humanoide.

Siempre activado

Cuando el HealthDisplayType de un humanoide se establece en HumanoidHealthDisplayType.AlwaysOn, su barra de salud siempre aparece.

Mostrar cuando está dañado

Un humanoide con HealthDisplayType configurado a HumanoidHealthDisplayType.DisplayWhenDamaged solo muestra una barra de salud cuando su Health es menor que su MaxHealth.En el siguiente escenario, Watchman tiene salud completa y no muestra una barra de salud, pero Octavia está dañada en un 50% y muestra una barra de salud amarilla.

Siempre desactivado

Cuando el HealthDisplayType de un humanoide se establece en HumanoidHealthDisplayType.AlwaysOff, su barra de salud nunca aparece bajo ninguna circunstancia.

Oclusión

La occlusión (escondimiento) de nombres humanoides detrás de paredes u otros objetos está controlada por la propiedad Humanoid.NameOcclusion del personaje.

NoOclusión

Cuando un humanoide está oculto detrás de un objeto visible y su NameOcclusion está configurado como NameOcclusion.NoOcclusion, su nombre y salud nunca se ocultan de la vista de los humanoides.

En el siguiente escenario, tanto Watchman como Octavia están configurados para NoOcclusion .Aunque ambos están suficientemente ocultos detrás de columnas de piedra, el humanoide de visualización sigue viendo sus pantallas de nombre/salud.

Ocluir todo

Cuando un humanoide está oculto detrás de un objeto visible y su NameOcclusion está configurado como NameOcclusion.OccludeAll, su nombre y salud siempre se ocultan de la vista de los humanoides.

En el siguiente escenario, tanto Watchman como Octavia están suficientemente ocultos detrás de columnas de piedra. Watchman está configurado para OccludeAll , por lo que su nombre y salud se ocultan del humanoide de vista, Octavia , sin embargo, está configurada para NoOcclusion y su nombre/salud sigue siendo visible para el humanoide de vista.

Oclusión enemiga

Cuando un humanoide está oculto detrás de un objeto visible y su NameOcclusion está configurado como NameOcclusion.EnemyOcclusion, su nombre y salud solo se ocultan de los humanoides enemigos (jugadores en un Team diferente).

En el siguiente escenario, tanto Watchman como Octavia están suficientemente ocultos detrás de columnas de piedra, y ambos están configurados para EnemyOcclusion .El humanoide de visualización y Watchman están en el mismo Team, por lo que la occlusión de nombre/salud no producirse.Sin embargo, el nombre y la salud de Octavia , en el equipo contrario, están ocultos.

Modificar la visualización de caracteres

Avatares de usuario

Para modificar el nombre o la pantalla de salud para cada avatar entrante en una experiencia, conecte los eventos Players.PlayerAdded y Player.CharacterAdded en un Script y establezca las propiedades de visualización en el personaje de Humanoid.

Script - Personalización global

local Players = game:GetService("Players")
local function onPlayerAdded(player)
player.CharacterAdded:Connect(function(character)
local humanoid = character:FindFirstChildWhichIsA("Humanoid")
if humanoid then
-- Dar a cada humanoide completo control sobre la distancia de visualización de su nombre/salud
humanoid.DisplayDistanceType = Enum.HumanoidDisplayDistanceType.Subject
-- Establecer la distancia de visualización del nombre a 20 studs
humanoid.NameDisplayDistance = 20
-- Establecer la distancia de visualización de la barra de salud a 15 studs
humanoid.HealthDisplayDistance = 15
-- Solo mostrar la barra de salud cuando el humanoide está dañado
humanoid.HealthDisplayType = Enum.HumanoidHealthDisplayType.DisplayWhenDamaged
end
end)
end
Players.PlayerAdded:Connect(onPlayerAdded)

También puedes personalizar propiedades basadas en un nombre de jugador Team, como establecer todos los jugadores "guardia" a un nombre genérico y ocultar los nombres de todos los jugadores "ninja".

Script - Personalización de equipo

local Players = game:GetService("Players")
local function onPlayerAdded(player)
player.CharacterAdded:Connect(function(character)
local humanoid = character:FindFirstChildWhichIsA("Humanoid")
if humanoid then
-- Establece el nombre de todos los guardias a "Guard" genérico
if player.Team.Name == "Guards" then
humanoid.DisplayName = "Guard"
-- Ocultar el nombre para todos los ninjas
elseif player.Team.Name == "Ninjas" then
humanoid.DisplayDistanceType = Enum.HumanoidDisplayDistanceType.None
end
end
end)
end
Players.PlayerAdded:Connect(onPlayerAdded)

Personajes de NPC

Para los personajes NPC ya colocados en el mundo 3D, puedes editar el nombre/salud directamente en el objeto Humanoid en la ventana Propiedades.

Anular nombres de visualización

Por defecto, el nombre de visualización de un humanoide coincide con la cuenta de Roblox del usuario Nombre de visualización que es única y separada de su cuenta Nombre de usuario .Para mostrar un nombre totalmente personalizado que no esté relacionado con la cuenta del usuario, puedes anular la propiedad Humanoid.DisplayName.

Establecer directamente

Puedes establecer la propiedad de cualquier instancia que obtengas referencia a través de un , como el ejemplo de personalización de equipo o directamente en el objeto Humanoide de un personaje NPC .

Establecido a través de la entrada del usuario

En algunos géneros como el juego de roles o la lucha, es posible que desees proporcionar un método para que los usuarios ingresen su propio nombre de personaje, nombre de mascota, etc.es específico de la experiencia y no está vinculado a su nombre de visualización de cuenta.Puedes recopilar esta entrada en el lado del cliente a través de una entrada de nombre TextBox.

Una vez que se envíe la entrada, puedes pasarla al servidor a través de un evento remoto remoto y luego, en el lado del servidor, escuchar el evento remoto y asignar el nombre filtrado al personaje de usuario Humanoid.

LocalScript - Evento de fuego remoto

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local changeNameEvent = ReplicatedStorage:WaitForChild("ChangeNameEvent")
changeNameEvent:FireServer("Amory")
Script - Asignar nombre filtrado

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local TextService = game:GetService("TextService")
-- Crear evento remoto para recibir texto del cliente para filtrar
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)