ForceField
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
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)
Resumen
Propiedades
Determines whether or not the ForceField particle effect is visible.
Propiedades
Visible
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
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)