ForceField
*Questo contenuto è tradotto usando AI (Beta) e potrebbe contenere errori. Per visualizzare questa pagina in inglese, clicca qui.
Un Campo di Forza protegge un Humanoid da danni inflitti attraverso il metodo Humanoid:TakeDamage() e protegge BaseParts da avere le articolazioni rotte a causa di un Explosion .Un nuovo Campo di Forza viene creato quando un personaggio si genera su un SpawnLocation e la proprietà SpawnLocation.Duration è maggiore di zero.
Danni e articolazioni
Un Campo di Forza influenza l'istanza a cui è parented.Quando è genitoriale a un Model , protegge tutto il BaseParts discendente da quel modello.Se parented a un BasePart , le articolazioni della parte saranno protette solo se sia la parte che la parte a cui è connessa contiene anche un ForceField .
ForceField protegge solo Humanoids dal danno inflitto dal metodo Humanoid:TakeDamage().Gli umanoidi possono ancora essere danneggiati impostando Humanoid.Health direttamente.Per questo motivo, si consiglia di utilizzare Humanoid:TakeDamage() per assegnare danni mentre si tiene conto della protezione del campo di forza.
Visualizzazione
Quando ForceField.Visible è impostato su vero, viene creato un effetto di particelle. Un certo numero di regole determina da dove verrà emesso questo effetto:
- Quando è genitorato a un Model , se il modello include un Humanoid chiamato Humanoid con Humanoid.RigType impostato su R15, l'effetto verrà emesso dalla parte chiamata Torso Superiore .Altrimenti, l'effetto verrà emesso dalla parte chiamata Torso .
- Quando parente a un BasePart l'effetto verrà emesso dalla parte di BasePart.Position .
Campioni di codice
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)
Proprietà
Visible
Determina se l'effetto particella ForceField è visibile o meno.Impostare questo a false ti consente di sostituire l'effetto delle particelle predefinito con un effetto personalizzato come dimostrato nel seguente esempio di codice.
Campioni di codice
Questo esempio include una funzione che sostituirà l'effetto particella del campo di forza predefinito con un effetto utilizzando ParticleEmitter che può essere modificato dallo sviluppatore.
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
-- trova il torso
local torsoName = humanoid.RigType == Enum.HumanoidRigType.R15 and "UpperTorso" or "Torso"
local torso = character:FindFirstChild(torsoName)
if torso then
-- creare un campo di forza
local forceField = Instance.new("ForceField")
forceField.Visible = false -- non visibile
-- creare un effetto di particelle
local particleEmitter = Instance.new("ParticleEmitter")
particleEmitter.Enabled = true
particleEmitter.Parent = torso
-- ascolta il campo di forza che viene rimosso
forceField.AncestryChanged:Connect(function(_child, parent)
if not parent then
if particleEmitter and particleEmitter.Parent then
particleEmitter:Destroy()
end
end
end)
-- genitore del campo di forza e impostalo per scadere
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)