ForceField

Mostrar obsoleto

A ForceField protects a Humanoid from taking damage dealt through the Humanoid:TakeDamage() method and protects BaseParts from having their joints broken due to an Explosion. A new ForceField is created when a character spawns on a SpawnLocation and the SpawnLocation.Duration property is greater than zero.

Damage and Joints

A ForceField influences the instance it's parented to. When parented to a Model, it protects all of the BaseParts descending from that model. If parented to a BasePart, the part's joints will only be protected if both the part and the part it's connected to also contain a ForceField.

ForceField only protects Humanoids from damage dealt by the Humanoid:TakeDamage() method. Humanoids can still be damaged by setting Humanoid.Health directly. For this reason, it's advised that you use Humanoid:TakeDamage() to assign damage while accounting for force field protection.

Visualization

When ForceField.Visible is set to true, a particle effect is created. A number of rules determine where this effect will be emitted from:

  • When parented to a Model, if the model includes a Humanoid named Humanoid with Humanoid.RigType set to R15, the effect will be emitted from the part named UpperTorso. Otherwise, the effect will be emitted from the part named Torso.
  • When parented to a BasePart the effect will be emitted from the part's BasePart.Position.

Muestras de código

ForceField Instantiation

local Players = game:GetService("Players")
local FORCE_FIELD_DURATION = 15
local function giveForcefield(player, duration)
local character = player.Character
if character then
local forceField = Instance.new("ForceField")
forceField.Visible = true
forceField.Parent = character
if duration then
task.delay(duration, function()
if forceField then
forceField:Destroy()
end
end)
end
end
end
local function onPlayerAdded(player)
player.CharacterAdded:Connect(function(_character)
giveForcefield(player, FORCE_FIELD_DURATION)
end)
end
Players.PlayerAdded(onPlayerAdded)

Propiedades

Visible

Leer paralelo

Determines whether or not the ForceField particle effect is visible. Setting this to false lets you replace the default particle effect with a custom effect as demonstrated in the following code sample.

Muestras de código

Custom ForceField Effect

local Players = game:GetService("Players")
local FORCE_FIELD_DURATION = 15
local function createCustomForcefield(player, duration)
local character = player.Character
if character then
local humanoid = character:FindFirstChild("Humanoid")
if humanoid then
-- find the torso
local torsoName = humanoid.RigType == Enum.HumanoidRigType.R15 and "UpperTorso" or "Torso"
local torso = character:FindFirstChild(torsoName)
if torso then
-- create a forcefield
local forceField = Instance.new("ForceField")
forceField.Visible = false -- not visible
-- create a particle effect
local particleEmitter = Instance.new("ParticleEmitter")
particleEmitter.Enabled = true
particleEmitter.Parent = torso
-- listen for the forcefield being removed
forceField.AncestryChanged:Connect(function(_child, parent)
if not parent then
if particleEmitter and particleEmitter.Parent then
particleEmitter:Destroy()
end
end
end)
-- parent the forcefield and set it to expire
forceField.Parent = character
if duration then
task.delay(duration, function()
if forceField then
forceField:Destroy()
end
end)
end
end
end
end
end
local function onPlayerAdded(player)
player.CharacterAdded:Connect(function(_character)
createCustomForcefield(player, FORCE_FIELD_DURATION)
end)
end
Players.PlayerAdded(onPlayerAdded)

Métodos

Eventos