Animare le parti

*Questo contenuto è tradotto usando AI (Beta) e potrebbe contenere errori. Per visualizzare questa pagina in inglese, clicca qui.

I giocatori possono ottenere feedback se le loro azioni stanno facendo qualcosa con le animazioni o meno.Questo può essere un albero che trema quando colpito, o un animale domestico allegro rimbalzante quando alimentato.In questo caso, ti mostreremo come creare un pulsante che si muove quando il giocatore lo clicca.

Tween con animazioni

Un modo per animare gli oggetti è utilizzare gli adolescenti.Un tween , breve per in mezzo, è il processo di cambiare un valore iniziale in un valore finale in un determinato periodo di tempo.Gli adolescenti possono essere utilizzati per modificare proprietà come posizione, colore o rotazione.

Configurazione del progetto

Per questo progetto, un adolescente sposterà un oggetto da una posizione di partenza a una posizione di destinazione.

  1. Determina quale parte animerai. Nell'esempio seguente, 1 è il pulsante e 2 è il muro.

  2. Nella parte che si Sposta, aggiungi un ClickDetector e uno script chiamato TweenMove. Non rinomina il ClickDetector.

  3. Apri lo script TweenMove. Quindi, copia e pasta lo script seguente.


    -- Adolescenti una parte avanti e indietro in base a un asse scelto
    -- Il pulsante ha uno stato on/off che sposta la parte in avanti o indietro
    local TweenService = game:GetService("TweenService")
    local button = script.Parent
    local clickDetector = button:FindFirstChildWhichIsA("ClickDetector")
    local buttonState = -1 -- Determina la direzione del pulsante; -1 significa che premerà, 1 significa che si espellerà
    local inTween = false
    -- Variable personalizzabili
    local TWEEN_TIME = 0.15
    local TWEEN_MOVE_DISTANCE = 1.5
    -- Variabili di mezzo
    local buttonTweenInfo = TweenInfo.new(
    TWEEN_TIME, -- Tempo
    Enum.EasingStyle.Quad, -- Stile di facilitazione
    Enum.EasingDirection.Out -- Direzione di facilitazione
    )
    local function buttonPress()
    -- Se il pulsante è in transizione, impedisci che venga nuovamente utilizzato
    if inTween == true then
    return
    end
    -- Calcola il nuovo CFrame per la posizione del pulsante
    local offsetCFrame = CFrame.new(0, TWEEN_MOVE_DISTANCE * buttonState, 0)
    local newCFrame = button.CFrame:ToWorldSpace(offsetCFrame)
    -- Crea un tween e giocalo
    local tweenButton = TweenService:Create(button, buttonTweenInfo, {CFrame = newCFrame})
    tweenButton:Play()
    inTween = true
    -- Al completamento dell'adolescenza, rendi nuovamente utilizzabile il pulsante
    tweenButton.Completed:Connect(function()
    inTween = false
    -- Inverti lo stato del pulsante
    buttonState *= -1
    end)
    end
    clickDetector.MouseClick:Connect(buttonPress)
  4. Playtest e clicca l'oggetto.Durante il test, potresti notare che l'oggetto si muove nella direzione o nella distanza sbagliata.Questo può essere personalizzato nella sezione successiva.

Direzione sbagliata; necessita di regolazione
Si muove correttamente; non è necessario alcun aggiustamento

Aggiusta il movimento gemellati

Con lo script aggiunto, puoi personalizzarlo per soddisfare le esigenze del tuo Gioco.Il pulsante può essere spostato per muoversi in direzioni come avanti e Indietro, o su e giù.

Cambia posizione

Ricorda, i preadolescenti passano da un valore iniziale a un valore di destinazione.Questo script utilizza CFrames per spostare il pulsante in una direzione rispetto alla sua posizione attuale.Quella direzione è controllata in Linea 28 dello script.

Su quella linea, viene creato un nuovo CFrame utilizzando le coordinate X, Y e Z. In questo esempio, il pulsante si muove rispetto al suo asse Y.


-- Calcola il nuovo CFrame per la posizione del pulsante
local offsetCFrame = CFrame.new(0, TWEEN_MOVE_DISTANCE * buttonState, 0)
local newCFrame = button.CFrame:ToWorldSpace(offsetCFrame)

Per far muovere il pulsante in una direzione diversa , sostituisci semplicemente una delle coordinate desiderate con la linea: TWEEN_MOVE_DISTANCE * buttonState .Imposta tutte le altre coordinate a 0.

Ad esempio, questa linea lo sposterà rispetto al suo asse X invece.


-- Calcola il nuovo CFrame per la posizione del pulsante
local offsetCFrame = CFrame.new( TWEEN_MOVE_DISTANCE * buttonState, 0, 0)
local newCFrame = button.CFrame:ToWorldSpace(offsetCFrame)

Tempo e distanza di mezzo

Lo script include le seguenti variabili che influiscono sul movimento del gemellati.I nomi capitalizzati come TWEEN_TIME sono scritti specificamente perché questo script venga modificato.

Prova a cambiare il valore di una variabile qui sotto:

  • Linea 11 - TWEEN_TIME : Il tempo in secondi che ci vuole perché accada un tween.
  • Linea 12 - TWEEN_MOVE_DISTANCE : La distanza in cui si muove il pulsante in studs.

Tween altre proprietà

La maggior parte delle proprietà con un tipo di dati numerico può essere ridimensionata.Questa sezione include alcune proprietà comuni, come la rotazione, che possono essere utilizzate per portare più feedback del giocatore nel tuo Gioco.Tieni presente, puoi anche tenere traccia di più proprietà contemporaneamente.

Per una lista completa delle proprietà, vedi la pagina TweenService.

Ruota

Per la rotazione, combina tweening e CFrames invece di utilizzare solo Vector3.I teenagers di rotazione possono essere utilizzati per far muovere le creature quando vengono prese, o le monete girare mentre vengono raccolte.

Nell'esempio di script successivo, la posizione e la rotazione della creatura sono entrambe ridimensionate quando viene cliccata per mostrare quanto è felice quando viene accarezzata.

Il codice seguente ruoterà un oggetto in base al numero di gradi in TWEEN_ROT_ANGLES .


-- Usa tween per far ruotare l'oggetto in su e rimbalzare
local TweenService = game:GetService("TweenService")
local partToTween = script.Parent
local clickDetector = partToTween:FindFirstChildWhichIsA("ClickDetector")
local inTween = false
-- Variable personalizzabili
local TWEEN_TIME = 0.25
local TWEEN_ROT_ANGLES = -45
local TWEEN_MOVE_DISTANCE = 3
-- Variabili di mezzo
local tweenInfo = TweenInfo.new(
TWEEN_TIME, -- Tempo
Enum.EasingStyle.Quad, -- Stile di facilitazione
Enum.EasingDirection.Out, -- Direzione di facilitazione
1, -- RepeatCount (quando inferiore a zero il tween si ripeterà all'infinito)
true -- Inversioni (tween si invertirà una volta raggiunto il suo obiettivo)
)
local function activateAction()
-- Se l'oggetto è in transizione, impedisci che venga nuovamente transizionato
if inTween == true then
return
end
-- Calcola il nuovo CFrame per la posizione e la rotazione dell'oggetto
local offsetCFrame = CFrame.new(0, TWEEN_MOVE_DISTANCE, 0)
local rotatedCFrame = CFrame.Angles(math.rad(TWEEN_ROT_ANGLES), 0, 0)
offsetCFrame = offsetCFrame:ToWorldSpace(rotatedCFrame)
local newCFrame = partToTween.CFrame:ToWorldSpace(offsetCFrame)
-- Crea un tween e giocalo
local tweenObject = TweenService:Create(partToTween, tweenInfo, {CFrame = newCFrame})
tweenObject:Play()
inTween = true
-- Al completamento dell'adolescenza, rendi nuovamente l'oggetto cliccabile
tweenObject.Completed:Connect(function()
inTween = false
end)
end
clickDetector.MouseClick:Connect(activateAction)

Dimensione

Cambiare le dimensioni degli oggetti in gioco può anche mostrare che un giocatore ha interagito con essi.Ad esempio, le raccolte come pacchi di salute o gemme possono restringersi quando vengono toccate.Per ridimensionare le parti, cambia l'obiettivo di mezzo a un nuovo Vector3 della dimensione desiderata.


-- Ridimensiona la scala di una parte quando viene toccata, quindi distruggerla
local TweenService = game:GetService("TweenService")
local partToScale = script.Parent
local inTween = false
-- Variable personalizzabili
local TWEEN_TIME = 1
local TWEEN_SCALE = Vector3.zero
-- Variabili di mezzo
local tweenInfo = TweenInfo.new(
TWEEN_TIME, -- Tempo
Enum.EasingStyle.Exponential, -- Stile di facilitazione
Enum.EasingDirection.Out -- Direzione di facilitazione
)
local function onPartTouch(otherPart)
-- Se l'oggetto è in transizione, impedisci che venga nuovamente transizionato
if inTween == true then
return
end
local partParent = otherPart.Parent
local humanoid = partParent:FindFirstChildWhichIsA("Humanoid")
if humanoid then
-- Prevenire ulteriori collisioni sull'oggetto poiché è stato raccolto
partToScale.CanCollide = false
-- Crea un tween e giocalo
local tweenObject = TweenService:Create(partToScale, tweenInfo, {Size = TWEEN_SCALE})
tweenObject:Play()
inTween = true
-- Al completamento dell'adolescenza, distruggi l'oggetto
tweenObject.Completed:Connect(function()
partToScale:Destroy()
end)
end
end
partToScale.Touched:Connect(onPartTouch)

Cambio colore

Le parti possono passare dai colori di transizione passando con i valori di Color3.Ad esempio, i nemici o gli oggetti distruttibili possono lampeggiare colori per dare feedback sul fatto che sono stati colpiti o cliccati.


-- Trasforma il colore di un oggetto al clic e distruggerlo dopo 3 clic
local TweenService = game:GetService("TweenService")
local partToTween = script.Parent
local clickDetector = partToTween:FindFirstChildWhichIsA("ClickDetector")
local inTween = false
-- Variable personalizzabili
local TWEEN_TIME = 0.2
local COLOR_ON_HIT = Color3.fromRGB(255, 0, 50)
local hitCount = 0
-- Variabili di mezzo
local tweenInfo = TweenInfo.new(
TWEEN_TIME, -- Tempo
Enum.EasingStyle.Exponential, -- Stile di facilitazione
Enum.EasingDirection.InOut, -- Direzione di facilitazione
0, -- RepeatCount (quando inferiore a zero il tween si ripeterà all'infinito)
true -- Inversioni (tween si invertirà una volta raggiunto il suo obiettivo)
)
local function activateAction()
-- Se l'oggetto è in transizione, impedisci che venga nuovamente transizionato
if inTween == true then
return
end
-- Crea un tween e giocalo
local tweenObject = TweenService:Create(partToTween, tweenInfo, {Color = COLOR_ON_HIT})
tweenObject:Play()
inTween = true
-- Al completamento dell'adolescenza, rendi nuovamente l'oggetto cliccabile
tweenObject.Completed:Connect(function()
inTween = false
-- Aumenta il conteggio degli hit
hitCount += 1
-- Dopo 3 colpi, distruggi l'oggetto
if hitCount == 3 then
partToTween:Destroy()
end
end)
end
clickDetector.MouseClick:Connect(activateAction)

Mentre questo script utilizza una parte normale per cambiare colore, è anche possibile utilizzarlo su MeshParts con una Strutturaapplicata.Le parti mesh vengono spesso importate modelli 3D, piuttosto che parti costruite direttamente in Roblox Studio.

Se stai lavorando con una MeshPart completamente texturizzata, consigliamo quanto Seguendo:

  1. Usa una SpecialMesh invece di una MeshPart. Questo perché la texture di un MeshPart sostituisce il colore che viene tinto dallo script.

  2. Modifica lo script per modificare il VertexColor della SpecialMesh invece della ProprietàColore.

Campione di progetto

Visualizza tutti gli esempi di script in questo Postonon bloccato. Ottieni tutti gli script da modificare anche.

Comprende gli script per la rotazione, lo scala e il cambio colore degli adolescenti.