A 포스필드 는 Humanoid 를 통해 입힌 피해를 방지하고 Humanoid:TakeDamage() 방법으로 인해 분리되는 것을 방지하며 BaseParts 는 Explosion 때문에 분리되는 것을 방지합니다.캐릭터가 포스필드 에 생성될 때 새로운 SpawnLocation이 0보다 크면 새로운 SpawnLocation.Duration 필드가 생성됩니다.
손상 및 관절
A 포스필드 는 부모인 인스턴스에 영향을 미칩니다.부모로 지정되면 Model 모델에서 내려오는 모든 BaseParts 가 보호됩니다.부모가 BasePart 에 있는 경우, 부품의 조인은 부품과 연결된 부품이 모두 포스필드 를 포함하는 경우에만 보호됩니다.
포스필드 는 메서드에 의해 입힌 피해로부터만 보호합니다.인간형은 여전히 Humanoid.Health으로 직접 손상을 입을 수 있습니다.이러한 이유로 포스필드 보호를 고려하면서 피해를 할당하기 위해 Humanoid:TakeDamage()를 사용하는 것이 좋습니다.
시각화
ForceField.Visible가 진실로 설정되면 입자 효과가 생성됩니다. 여러 규칙이 이 효과가 발산될 위치를 결정합니다.
- 부모로 지정된 경우 에 모델이 포함된 경우, 모델에 라는 이름의 휴머노이드 가 R15로 설정되어 있으면, 효과는 상의 몸통 이라는 부분에서 방출됩니다.그렇지 않으면, 효과는 몸통 이라는 부품에서 방출됩니다.
- 부모로 지정되면 BasePart 효과가 부품의 BasePart.Position 에서 방출됩니다.
코드 샘플
This code sample includes a function that will give a Player a ForceField for a specific duration.
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로 설정하면 다음 코드 샘플에서 보여준 것처럼 기본 입자 효과를 사용자 지정 효과로 교체할 수 있습니다.
코드 샘플
This sample includes a function that will replace the default ForceField particle effect with an effect using ParticleEmitters that can be modified by the developer.
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)