一个 力场 保护一个Humanoid免受通过Humanoid:TakeDamage()造成的伤害,保护一个BaseParts免受由于Explosion而使其关节被破坏。当角色在 力场 上生成时,如果 SpawnLocation 属性大于零,将创建一个新的 SpawnLocation.Duration 力场。
伤害和关节
一个 力场 影响它所属的实例。当作为父辈到一个 Model 时,它保护所有从该模型中下降的 BaseParts 。如果作为父辈到一个 BasePart ,零件的接头只会受到保护,如果部件和它连接的部件也包含 力场 。
力场 仅保护Humanoids免受由Humanoid:TakeDamage()造成的伤害。人形仍然可以通过设置 Humanoid.Health 直接受到伤害。因此,建议您使用 Humanoid:TakeDamage() 来分配伤害,同时考虑力场保护。
视觉化
当 ForceField.Visible 设置为真时,粒子效果会被创建。一系列规则决定此效果将从哪里发射:
- 当父辈到一个 时,如果模型包含一个名为 的 人形 模型,其效果将从名为 上躯干 的部分发出。否则,效果将从名为 躯干 的部分发出。
- 当作为父辈发送到 BasePart 时,效果将从零件的 BasePart.Position 发出。
代码示例
This code sample includes a function that will give a Player a ForceField for a specific duration.
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)
概要
属性
Visible
决定是否可以看到 ForceField 粒子效果。将其设置为 false 可让您以下列代码示例中所示的自定义效果替换默认的粒子效果。
代码示例
该示例包含一个函数,可以用具有开发者可以修改的粒子发射器的效果来替换默认的力场粒子效果。
自定义力场效果
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
-- 找到躯干
local torsoName = humanoid.RigType == Enum.HumanoidRigType.R15 and "UpperTorso" or "Torso"
local torso = character:FindFirstChild(torsoName)
if torso then
-- 创建力场
local forceField = Instance.new("ForceField")
forceField.Visible = false -- 不可见
-- 创建粒子效果
local particleEmitter = Instance.new("ParticleEmitter")
particleEmitter.Enabled = true
particleEmitter.Parent = torso
-- 收听力场被移除
forceField.AncestryChanged:Connect(function(_child, parent)
if not parent then
if particleEmitter and particleEmitter.Parent then
particleEmitter:Destroy()
end
end
end)
-- 父辈力场并将其设置为过期
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)