Teile animieren

*Dieser Inhalt wurde mit KI (Beta) übersetzt und kann Fehler enthalten. Um diese Seite auf Englisch zu sehen, klicke hier.

Spieler können Feedback erhalten, ob ihre Aktionen etwas mit Animationen machen oder nicht.Dies kann ein baumschütteln sein, wenn es getroffen wird, oder ein haustier fröhlich springt, wenn es gefüttert wird.In diesem Fall zeigen wir Ihnen, wie Sie einen Button erstellen, der sich bewegt, wenn der Spieler darauf klickt.

Tween mit Animationen

Eine Möglichkeit, Objekte zu animieren, ist die Verwendung von Teenagern.Ein Übergang , kurz für dazwischen, ist der Prozess, bei dem ein Startwert zu einem Endwert über einen bestimmten Zeitraum geändert wird.Teenager können verwendet werden, um Eigenschaften wie Position, Farbe oder Drehung zu ändern.

Projekt-Einrichtung

Für dieses Projekt wird ein Teenager ein Objekt von einer Startposition in eine Zielposition verschieben.

  1. Bestimme, welchen Teil du animieren wirst. Im folgenden Beispiel ist 1 der Knopf und 2 die Wand.

  2. Füge im Teil, das sich Verschiebungswerkzeug, einen Klickdetektor und ein Skript namens TweenMove hinzu. Benenne den Klickdetektor nicht um.

  3. Öffne das Skript, das. PL: die Skripts. Dann kopiere und füge das Skript unten ein.


    -- Teenager ein Teil hin und her basierend auf einer ausgewählten Achse
    -- Der Button hat einen On/Off-Zustand, der das Teil vorwärts oder rückwärts bewegt
    local TweenService = game:GetService("TweenService")
    local button = script.Parent
    local clickDetector = button:FindFirstChildWhichIsA("ClickDetector")
    local buttonState = -1 -- Bestimmt die Knopfrichtung; -1 bedeutet, dass es drückt, 1 bedeutet, dass es herauskommt
    local inTween = false
    -- Anpassbare Variablen
    local TWEEN_TIME = 0.15
    local TWEEN_MOVE_DISTANCE = 1.5
    -- Unter变量 Tween-Variable
    local buttonTweenInfo = TweenInfo.new(
    TWEEN_TIME, -- Zeit
    Enum.EasingStyle.Quad, -- Entspannungsstil
    Enum.EasingDirection.Out -- Entlastungsrichtung
    )
    local function buttonPress()
    -- Wenn die Schaltfläche tweening wird, verhindere, dass sie wieder verwendet wird
    if inTween == true then
    return
    end
    -- Neues CFrame für Knopfposition berechnen
    local offsetCFrame = CFrame.new(0, TWEEN_MOVE_DISTANCE * buttonState, 0)
    local newCFrame = button.CFrame:ToWorldSpace(offsetCFrame)
    -- Erstelle einen Teenager und spiele ihn
    local tweenButton = TweenService:Create(button, buttonTweenInfo, {CFrame = newCFrame})
    tweenButton:Play()
    inTween = true
    -- Bei der Fertigstellung in der Mitte machen Sie die Schaltfläche wieder verwendbar
    tweenButton.Completed:Connect(function()
    inTween = false
    -- Umkehren des Knopfstatus
    buttonState *= -1
    end)
    end
    clickDetector.MouseClick:Connect(buttonPress)
  4. Teste dein Spiel und klicke auf das Objekt.Während des Tests kannst du bemerken, dass das Objekt in die falsche Richtung oder Entfernung bewegt wird.Das kann im nächsten Abschnitt angepasst werden.

Falsche Richtung; muss angepasst werden
Bewegt sich richtig; keine Anpassung erforderlich

Zur Anpassung der Bewegung Tween

Mit dem Skript, das hinzugefügt wurde, kannst du es an die Bedürfnisse deines Spiels anpassen.Die Schaltfläche kann in Richtungen wie vorwärts und hinten oder Zurückund unten verschoben werden.

Position ändern

Denk daran, Teenager wechseln von einem Startwert zu einem Zielwert.Dieses Skript verwendet CFrames, um die Schaltfläche in eine Richtung zu verschieben, die sich relativ zu ihrer aktuellen Position befindet.Diese Richtung wird in Linie 28 des Skript, das. PL: die Skriptsgesteuert.

An dieser Linie wird ein neuer CFrame mit den Koordinaten X, Y und Z erstellt. In diesem Beispiel bewegt sich die Schaltfläche relativ zu ihrer Y-Achse.


-- Neues CFrame für Knopfposition berechnen
local offsetCFrame = CFrame.new(0, TWEEN_MOVE_DISTANCE * buttonState, 0)
local newCFrame = button.CFrame:ToWorldSpace(offsetCFrame)

Um den Knopf in einer anderen Richtung zu verschieben, ersetze einfach eine der gewünschten Koordinaten durch die Linie: TWEEN_MOVE_DISTANCE * buttonState .Setze alle anderen Koordinaten auf 0.

Zum Beispiel bewegt diese Zeile es stattdessen relativ zu seiner X-Achse.


-- Neues CFrame für Knopfposition berechnen
local offsetCFrame = CFrame.new( TWEEN_MOVE_DISTANCE * buttonState, 0, 0)
local newCFrame = button.CFrame:ToWorldSpace(offsetCFrame)

Übergangszeit und -entfernung

Das Skript enthält die folgenden Variablen, die die Bewegung des Tweenbeeinflussen.Hochgestellte Namen wie TWEEN_TIME werden speziell geschrieben, damit dieses Skript modifiziert werden kann.

Versuchen Sie, den Wert einer Variable unten zu ändern:

  • Linie 11 - TWEEN_TIME : Die Zeit in Sekunden, die es dauert, bis ein Teenager passiert.
  • Linie 12 - TWEEN_MOVE_DISTANCE : Die Entfernung, die der Knopf in Stollen bewegt.

Zwischen anderen Eigenschaften

Die meisten Eigenschaften mit einem numerischen Daten тип können zwischengeschaltet werden.Dieser Abschnitt enthält einige gemeinsame Eigenschaften, wie Drehung, die verwendet werden können, um mehr Spieler-Feedback in dein Spiel zu bringen.Denken Sie daran, dass Sie auch mehrere Eigenschaften gleichzeitig durchschalten können.

Für eine vollständige Liste der Eigenschaften siehe die TweenService.

Drehen

Für die Rotation kombinieren Sie Tweening und CFrames anstatt nur Vector3.Rotation tweens können verwendet werden, um Kreaturen zu wackeln zu lassen, wenn sie als Haustier oder Münzen abgeholt werden.

Im nächsten Skriptbeispiel werden sowohl die Position als auch die Rotation der Kreatur eingefärbt, wenn sie angeklickt wird, um zu zeigen, wie glücklich sie ist, wenn sie gestreichelt wird.

Der Code unten wird ein Objekt drehen, basierend auf der Anzahl der Grad in TWEEN_ROT_ANGLES.


-- Verwendet Tween, um das Objekt zu drehen und zu rebounden
local TweenService = game:GetService("TweenService")
local partToTween = script.Parent
local clickDetector = partToTween:FindFirstChildWhichIsA("ClickDetector")
local inTween = false
-- Anpassbare Variablen
local TWEEN_TIME = 0.25
local TWEEN_ROT_ANGLES = -45
local TWEEN_MOVE_DISTANCE = 3
-- Unter变量 Tween-Variable
local tweenInfo = TweenInfo.new(
TWEEN_TIME, -- Zeit
Enum.EasingStyle.Quad, -- Entspannungsstil
Enum.EasingDirection.Out, -- Entlastungsrichtung
1, -- RepeatCount (wenn weniger als Null der Teenager unendlich wiederholt wird)
true -- Umkehrungen (tween wird umkehren, sobald es sein Ziel erreicht)
)
local function activateAction()
-- Wenn das Objekt tweening wird, verhindere, dass es erneut tweening wird
if inTween == true then
return
end
-- Berechnen Sie ein neues CFrame für die Position und Rotation des Objekts
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)
-- Erstelle einen Teenager und spiele ihn
local tweenObject = TweenService:Create(partToTween, tweenInfo, {CFrame = newCFrame})
tweenObject:Play()
inTween = true
-- Bei der Fertigstellung in der Mitte machen Sie das Objekt wieder klickbar
tweenObject.Completed:Connect(function()
inTween = false
end)
end
clickDetector.MouseClick:Connect(activateAction)

Skalierung

Die Änderung der Größe von In-Game-Objekten kann auch zeigen, dass ein Spieler mit ihnen interagiert hat.Zum Instanzkönnen Abholungen wie Gesundheitspakete oder Edelsteine schrumpfen, wenn sie berührt werden.Um Teile zu skalieren, ändere das Zwischenziel auf einen neuen Vector3 der gewünschten Größe.


-- Zwischen der Skala eines Teils, wenn es berührt wird, und zerstöre es dann
local TweenService = game:GetService("TweenService")
local partToScale = script.Parent
local inTween = false
-- Anpassbare Variablen
local TWEEN_TIME = 1
local TWEEN_SCALE = Vector3.zero
-- Unter变量 Tween-Variable
local tweenInfo = TweenInfo.new(
TWEEN_TIME, -- Zeit
Enum.EasingStyle.Exponential, -- Entspannungsstil
Enum.EasingDirection.Out -- Entlastungsrichtung
)
local function onPartTouch(otherPart)
-- Wenn das Objekt tweening wird, verhindere, dass es erneut tweening wird
if inTween == true then
return
end
local partParent = otherPart.Parent
local humanoid = partParent:FindFirstChildWhichIsA("Humanoid")
if humanoid then
-- Verhindere weitere Kollisionen auf dem Objekt, da es aufgehoben wurde
partToScale.CanCollide = false
-- Erstelle einen Teenager und spiele ihn
local tweenObject = TweenService:Create(partToScale, tweenInfo, {Size = TWEEN_SCALE})
tweenObject:Play()
inTween = true
-- Bei der Zwischenabschlussvervollständigung, zerstöre das Objekt
tweenObject.Completed:Connect(function()
partToScale:Destroy()
end)
end
end
partToScale.Touched:Connect(onPartTouch)

Farbwechsel

Teile können Farben über einen Übergang wechseln, indem sie mit Farbenwerten von Color3 tweenen.Zum Instanzkönnen Feinde oder zerstörbare Objekte Farben einblenden, um Feedback zu geben, dass sie getroffen oder angeklickt wurden.


-- Ändere die Farbe eines Objekts beim Klicken und zerstöre es nach 3 Klicks
local TweenService = game:GetService("TweenService")
local partToTween = script.Parent
local clickDetector = partToTween:FindFirstChildWhichIsA("ClickDetector")
local inTween = false
-- Anpassbare Variablen
local TWEEN_TIME = 0.2
local COLOR_ON_HIT = Color3.fromRGB(255, 0, 50)
local hitCount = 0
-- Unter变量 Tween-Variable
local tweenInfo = TweenInfo.new(
TWEEN_TIME, -- Zeit
Enum.EasingStyle.Exponential, -- Entspannungsstil
Enum.EasingDirection.InOut, -- Entlastungsrichtung
0, -- RepeatCount (wenn weniger als Null der Teenager unendlich wiederholt wird)
true -- Umkehrungen (tween wird umkehren, sobald es sein Ziel erreicht)
)
local function activateAction()
-- Wenn das Objekt tweening wird, verhindere, dass es erneut tweening wird
if inTween == true then
return
end
-- Erstelle einen Teenager und spiele ihn
local tweenObject = TweenService:Create(partToTween, tweenInfo, {Color = COLOR_ON_HIT})
tweenObject:Play()
inTween = true
-- Bei der Fertigstellung in der Mitte machen Sie das Objekt wieder klickbar
tweenObject.Completed:Connect(function()
inTween = false
-- Erhöhung der Trefferanzahl
hitCount += 1
-- Nach 3 Treffern zerstöre das Objekt
if hitCount == 3 then
partToTween:Destroy()
end
end)
end
clickDetector.MouseClick:Connect(activateAction)

Während dieses Skript ein normales Teil verwendet, um die Farbe zu ändern, ist es auch möglich, dies auf MeshParts mit einer angewendeten Textur anzuwenden.MeshParts werden oft 3D-Modelle importiert, anstatt Teile direkt in Roblox Studio zu bauen.

Wenn du mit einem vollständig texturierten MeshPart arbeitest, empfehlen wir gefolgte Profile:

  1. Verwende ein Spezialmeshes statt eines MeshParts. Dies liegt daran, dass die Textur eines MeshParts die Farbe überschreibt, die vom Skript, das. PL: die Skriptsgetönt wird.

  2. Ändere das Skript, um die VertexColor des Spezialgitters anstelle der Eigenschaftenzu modifizieren.

Projekt-Beispiel

Sehen Sie sich alle Skriptbeispiele an diesem nicht kopiergeschützten Ort an. Holen Sie sich alle Skripte, die auch modifiziert werden müssen.

Enthält Skripte für Rotation, Skalierung und Farbwechsel-Teenager.