ForceField

Show Deprecated

A ForceField protects a Humanoid from taking damage using the Humanoid:TakeDamage() function, and protects BaseParts from having their joints broken due to an Explosion.

ForceField Creation

ForceFields are created when a character spawns on a SpawnLocation and the SpawnLocation.Duration property is greater than zero.

ForeFields influence the instance they are parented to. When parented to a Model they will protect all of the BaseParts descending from that model. They may be parented to a BasePart, but the part's joints will only be protected if both the part and the part it is connected to also contain ForceField.

Forcefields and Joints

When a ForceField is parented to a character Model the neck joint will be protected and thus the character can not be killed by Explosions. Developers can protect joints from Explosions without the need for a ForceField object by setting Explosion.DestroyJointRadiusPercent to 0.

ForceFields and Damage

ForceFields only protect Humanoids from damage using the Humanoid:TakeDamage() function. Humanoids can still be damaged by setting Humanoid.Health directly. For this reason, it is advised that developers use Humanoid:TakeDamage(). Bearing in mind of course, that it is still possible to check if a ForceField exists before manually setting the humanoid's health as shown below:


if not characterModel:FindFirstChildOfClass("ForceField") then
humanoid.Health = humanoid.Health - 10
end

ForceField Visuals

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". The part must have the same parent as the ForceField, if it does not exist then the effect is emitted at 0, 0, 0.

When parented to a BasePart the effect will be emitted from the part's BasePart.Position.

Code Samples

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)
SpawnLocation ForceField

local spawnLocation = Instance.new("SpawnLocation")
spawnLocation.Anchored = true
spawnLocation.Size = Vector3.new(5, 1, 5)
spawnLocation.Neutral = true -- anyone can spawn here
spawnLocation.Duration = 20
spawnLocation.Parent = workspace

Summary

Properties

Determines whether or not the ForceField's particle effect is visible.

Methods

Events

Properties

Visible

Determines whether or not the ForceField's particle effect is visible.

When 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 "Humanoiod" 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". The part must have the same parent as the ForceField, if it does not exist then the effect is emitted at 0, 0, 0.

When parented to a BasePart the effect will be emitted from the part's BasePart.Position.

One use for this property is replacing the default particle effect with a custom effect using ParticleEmitters.

Code Samples

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)

Methods

Events