Nombre/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 usuarios 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 encima de esa parte.

Character display information above an in-experience avatar

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

  • La distancia desde la que los usuarios pueden ver el nombre/salud de otros humanoides en relación con el humanoide de su propio personaje.
  • El nombre de pantalla que se muestra sobre un humanoide.
  • Ya sea que la barra de salud de un humanoide siempre aparezca, nunca aparezca o solo aparezca cuando el humanoide esté dañado.
  • Si los nombres y las barras de salud están oclusos (ocultos) cuando la línea de visión entre la cámara y otro humanoide está bloqueada.

Propiedades de visualización

Tipo de 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.

Espectador

Cuando el DisplayDistanceType de un humanoide está establecido en HumanoidDisplayDistanceType.Viewer, ve el nombre / salud de otros humanoides dentro del rango de su propio NameDisplayDistance y HealthDisplayDistance. Puede considerar esta 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 ( Viewer ) tiene un NameDisplayDistance más grande que HealthDisplayDistance , como lo indican los círculos. Como resultado, el usuario ve nombres de personajes para Watchman y Octavia , pero solo ve una barra de salud para Watchman .

Sujeto

Cuando el DisplayDistanceType de un humanoide está establecido en HumanoidDisplayDistanceType.Subject, toma control completo sobre su propio nombre y pantalla de salud a través de sus NameDisplayDistance y HealthDisplayDistance valores. Efectivamente, otros humanoides solo verán el nombre / salud del sujeto a esas distancias del sujeto humanoide.

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

Ninguno

Cuando el DisplayDistanceType de un humanoide está configurado como HumanoidDisplayDistanceType.None, su nombre y la barra de salud no aparecen en ninguna circunstancia. En el siguiente escenario, tanto Watchman como Octavia están configurados como None , por lo que el otro personaje no ve su nombre ni su salud incluso cuando está en rango.

Tipo de pantalla 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 la salud del humanoide disminuye.

Siempre Encendido

Cuando el HealthDisplayType de un humanoide está establecido en HumanoidHealthDisplayType.AlwaysOn, su barra de salud siempre aparece.

Mostrar cuando está dañado

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

Siempre Desactivado

Cuando el HealthDisplayType de un humanoide está establecido en HumanoidHealthDisplayType.AlwaysOff, su barra de salud nunca aparece en ninguna circunstancia.

Oclusión

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

No oclusión

Cuando un humanoide está escondido detrás de un objeto visible y su NameOcclusion está establecido en NameOcclusion.NoOcclusion, su nombre y salud nunca están oclusos de la vista de los humanoides.

En el siguiente escenario, tanto Watchman como Octavia están configurados como NoOcclusion . Aunque ambos están suficientemente ocultos detrás de columnas de piedra, el humanoide que los mira todavía ve su nombre / pantalla de salud.

OcluirTodo

Cuando un humanoide está escondido detrás de un objeto visible y su NameOcclusion está establecido en NameOcclusion.OccludeAll, su nombre y salud siempre están oclusos 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á establecido en OccludeAll , por lo que su nombre y salud están ocultos del humanoide que está viendo. Octavia , sin embargo, está establecido en NoOcclusion y su nombre / salud permanece visible para el humanoide que está viendo.

Oclusión enemiga

Cuando un humanoide está escondido detrás de un objeto visible y su NameOcclusion está establecido en NameOcclusion.EnemyOcclusion, su nombre y salud solo están oclusos de los humanoides enemigos (jugadores en un Team ).

En el siguiente escenario, tanto Watchman como Octavia están suficientemente ocultos detrás de columnas de piedra, y ambos están configurados como EnemyOcclusion . El humanoide que mira y Watchman están en el mismo Team, por lo que no se producirsela oclusión de nombre / salud. Sin embargo, el nombre y la salud de Octavia , en el equipo opuesto, están oclusos.

Modificación de las pantallas de personajes

Avatares de usuario

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

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
-- Dale a cada humanoide control completo sobre su nombre / distancia de visualización de salud
humanoid.DisplayDistanceType = Enum.HumanoidDisplayDistanceType.Subject
-- Establece la distancia de visualización del nombre en 20 studs
humanoid.NameDisplayDistance = 20
-- Establece la distancia de visualización de la barra de salud en 15 studs
humanoid.HealthDisplayDistance = 15
-- Solo muestra 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 el Team de un jugador, como establecer todos los jugadores de "guardia" con un nombre genérico y ocultar los nombres de todos los jugadores de "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 como "Guardia" genérico
if player.Team.Name == "Guards" then
humanoid.DisplayName = "Guard"
-- Ocultar el nombre de todos los ninjas
elseif player.Team.Name == "Ninjas" then
humanoid.DisplayDistanceType = Enum.HumanoidDisplayDistanceType.None
end
end
end)
end
Players.PlayerAdded:Connect(onPlayerAdded)

Personajes NPC

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

Anular Nombres de Visualización

De forma predeterminada, el nombre de pantalla de un humanoide coincide con el nombre de pantalla de la cuenta de Roblox del usuario, que es único y separado de su cuenta Nombre de usuario . Para mostrar un nombre totalmente personalizado que no está relacionado con la cuenta del usuario, puede anular la propiedad Humanoid.DisplayName.

Configuración Directa

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

Configuración a través de la entrada del usuario

En algunos géneros, como juegos de rol o lucha, es posible que quieras proporcionar un método para que los usuarios ingresen su propio nombre de personaje, nombre de personaje de mascota, etc. que es específico de la experiencia y no está vinculado al nombre de visualizaciónde su cuenta.

Puedes recopilar esta entrada en el lado del cliente a través de una entrada de nombre TextBox o lo que sea que se adapte a la interfaz de la experiencia, luego passala al servidor con un evento remoto . En el lado del servidor, puedes escuchar el evento remoto y asignar el nombre filtrado al personaje del usuario Humanoid .

LocalScript - Evento Remoto de Fuego

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")
-- Crea un evento remoto para recibir texto del cliente para su filtrado
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)