Spieler können Feedback darüber erhalten, ob ihre Aktionen mit Animationen etwas tun oder nicht. Dies kann ein Baum schütteln, wenn er getroffen wird, oder ein Haustier, der fröhlich springt, wenn er gefüttert wird. In diesem Fall zeigen wir Ihnen, wie Sie eine Schaltfläche erstellen, die sich bewegt, wenn der Spieler darauf klickt.
Animations-Tweening
Eine Möglichkeit, Objekte zu animieren, ist die Verwendung von Tweens. Ein Tween , kurz für Zwischenhalte, ist der Prozess, den Startwert in einen Endwert über eine bestimmte Zeit zu ändern. Tweens können verwendet werden, um Eigenschaften wie Position, Farbe oder Rotation zu ändern.
Projekt-Einstellungen
Für dieses Projekt wird ein Tween ein Objekt von einer Startposition zu einer Zielposition verschieben.
Bestimmen Sie, welches Teil Sie animieren. Im folgenden Beispiel ist 1 die Schaltfläche und 2 die Wand.
In dem sich VerschiebungswerkzeugTeil fügen Sie einen ClickDetector und ein Skript namens TweenMove hinzu. Sie sollten den ClickDetector nicht umbenennen.
Öffnen Sie das Skript, das. PL: die Skripts. Dann kopieren und fügen Sie das Skript unten ein.
-- Tweens ein Teil nach innen und außen basierend auf einer gewählten Achse-- Die Taste hat einen ein/aus-Zustand, der die Teil nach vorne oder hinten bewegtlocal TweenService = game:GetService("TweenService")local button = script.Parentlocal clickDetector = button:FindFirstChildWhichIsA("ClickDetector")local buttonState = -1 -- Bestimmt die Richtung der Schaltfläche; -1 bedeutet, dass es hinein gedrückt wird, 1 bedeutet, dass es herausgehtlocal inTween = false-- Benutzerdefinierte Variablenlocal TWEEN_TIME = 0.15local TWEEN_MOVE_DISTANCE = 1.5-- Zwischen variablenlocal buttonTweenInfo = TweenInfo.new(TWEEN_TIME, -- ZeitEnum.EasingStyle.Quad, -- Stil einfahrenEnum.EasingDirection.Out -- Richtung leiten)local function buttonPress()-- Wenn die Schaltfläche tweening, verhindern Sie, dass sie erneut verwendet wirdif inTween == true thenreturnend-- Berechnen Sie den neuen CFrame für die Button-Positionlocal offsetCFrame = CFrame.new(0, TWEEN_MOVE_DISTANCE * buttonState, 0)local newCFrame = button.CFrame:ToWorldSpace(offsetCFrame)-- Erstellen Sie ein Twist und spielen Sie eslocal tweenButton = TweenService:Create(button, buttonTweenInfo, {CFrame = newCFrame})tweenButton:Play()inTween = true-- Bei der Abwicklung der Schaltfläche die Schaltfläche erneut verwendbar machentweenButton.Completed:Connect(function()inTween = false-- Umkehren Sie den Button-StatusbuttonState *= -1end)endclickDetector.MouseClick:Connect(buttonPress)Spieltest und klicke auf das Objekt. Während des Testes kannst du bemerken, dass das Objekt die falsche Richtung oder Distanz bewegt. Das kann in der nächsten Sektion anpassbar sein.
Anpassen der Bewegung Tween
Mit dem Skript hinzugefügt kannst du es anpassen, um den Bedürfnissen deines Spiels gerecht zu werden. Die Schaltfläche kann in Richtungen wie vorwärts und Zurückversetzt werden, oder nach oben und unten geschwenkt werden.
Position ändern
Denken Sie daran, dass Teenager von einem Startwert zu einem Zielwert wechseln. Dieses Skript verwendet CFrames, um die Schaltfläche in einer Richtung in Bezug auf seine aktuelle Position zu bewegen. Diese Richtung wird in Zeile 28 des Skript, das. PL: die Skriptssteuereingestellt.
Auf dieser Linie wird ein neuer CFrame mit X, Y und Z-Koordinaten erstellt. In diesem Beispiel bewegt sich die Schaltfläche in Relation zu ihrer Y-Achse.
-- Berechnen Sie den neuen CFrame für die Button-Positionlocal offsetCFrame = CFrame.new(0, TWEEN_MOVE_DISTANCE * buttonState, 0)local newCFrame = button.CFrame:ToWorldSpace(offsetCFrame)
Um die Schaltfläche in einer anderen Richtung zu bewegen, ersetzen Sie einfach eine der gewünschten Koordinaten durch die Zeile: TWEEN_MOVE_DISTANCE * buttonState . Setzen Sie alle anderen Koordinaten auf 0.
Zum Beispiel bewegt sich diese Linie stattdessen relativ zu seiner X-Achse.
-- Berechnen Sie den neuen CFrame für die Button-Positionlocal offsetCFrame = CFrame.new( TWEEN_MOVE_DISTANCE * buttonState, 0, 0)local newCFrame = button.CFrame:ToWorldSpace(offsetCFrame)
Tweening-Zeit und -Distanz
Das Skript enthält die folgenden Variablen, die die Bewegung des Tweens beeinflussen. Groß gesch写ene Namen wie TWEEN_TIME werden speziell für dieses Skript geschrieben, um modifiziert zu werden.
Versuchen Sie, den Wert einer Variable unten zu ändern:
- Zeile 11 - TWEEN_TIME : Die Zeit in Sekunden, die für einen Tween erforderlich ist.
- Zeile 12 - TWEEN_MOVE_DISTANCE : Die Entfernung, in der die Schaltfläche in Klötzen bewegt wird.
Andere Eigenschaften anpassen
Die meisten Eigenschaften mit einer nummerischen Datenart können tweened werden. Dieser Abschnitt enthält einige gemeinsame Eigenschaften, wie Rotation, die verwendet werden kann, um mehr Spieler-Feedback in dein Spiel zu bringen. Denke daran, du kannst auch mehrere Eigenschaften gleichzeitig tweenen.
Für eine vollständige Liste der Eigenschaften, siehe die TweenService API-Seite.
Drehend
Für dieRotation kombinieren Sie Tweening und CFrames, anstatt einfach Vector3 zu verwenden. Rotation Tweens können verwendet werden, um Kreaturen zu bewegen, wenn Haustier oder Münzen drehen, wenn sie aufgehoben werden.
Im nächsten Skriptbeispiel sind die Position und die Rotation der Kreatur sowohl mit dem Scrollen als auch mit dem Klicken anvisiert, um zu zeigen, wie glücklich sie ist, wenn sie getreten wird.
Der Code unten wird ein Objekt basierend auf der Anzahl der Grad in TWEEN_ROT_ANGLES drehen.
-- Verwendet Tween, um das Objekt nach oben zu drehen und abzusteigen
local TweenService = game:GetService("TweenService")
local partToTween = script.Parent
local clickDetector = partToTween:FindFirstChildWhichIsA("ClickDetector")
local inTween = false
-- Benutzerdefinierte Variablen
local TWEEN_TIME = 0.25
local TWEEN_ROT_ANGLES = -45
local TWEEN_MOVE_DISTANCE = 3
-- Zwischen variablen
local tweenInfo = TweenInfo.new(
TWEEN_TIME, -- Zeit
Enum.EasingStyle.Quad, -- Stil einfahren
Enum.EasingDirection.Out, -- Richtung leiten
1, -- RepeatCount (wenn weniger als null der Tween unbestimmt indefiniert wiederholt)
true -- Rückgänge (tween wird einmal das Ziel erreicht haben)
)
local function activateAction()
-- Wenn das Objekt tweening wird, verhindern Sie, dass es erneut tweening wird
if inTween == true then
return
end
-- Berechnen Sie den neuen CFrame für die Position und die 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)
-- Erstellen Sie ein Twist und spielen Sie es
local tweenObject = TweenService:Create(partToTween, tweenInfo, {CFrame = newCFrame})
tweenObject:Play()
inTween = true
-- Bei der Verarbeitung von tween-Klicks erneut Objekt anklicken
tweenObject.Completed:Connect(function()
inTween = false
end)
end
clickDetector.MouseClick:Connect(activateAction)
Skalierung
Die Größe von In-Game-Objekten kann auch anzeigen, dass ein Spieler mit ihnen interagiert hat. Zum Instanzkönnen Aufhebungen wie Gesundheitspakete oder Edelsteine schrumpfen, wenn sie berührt werden. Um Teile zu skalieren, ändern Sie das Ziel des Tween auf einen neuen Vector3 der gewünschten Größe.
-- Ziehe die Skala eines Teils, wenn er berührt wird, und zerstöre sie dann
local TweenService = game:GetService("TweenService")
local partToScale = script.Parent
local inTween = false
-- Benutzerdefinierte Variablen
local TWEEN_TIME = 1
local TWEEN_SCALE = Vector3.zero
-- Zwischen variablen
local tweenInfo = TweenInfo.new(
TWEEN_TIME, -- Zeit
Enum.EasingStyle.Exponential, -- Stil einfahren
Enum.EasingDirection.Out -- Richtung leiten
)
local function onPartTouch(otherPart)
-- Wenn das Objekt tweening wird, verhindern Sie, dass es erneut tweening wird
if inTween == true then
return
end
local partParent = otherPart.Parent
local humanoid = partParent:FindFirstChildWhichIsA("Humanoid")
if humanoid then
-- Verhindern Sie weitere Kollisionen auf dem Objekt, da es aufgehoben wurde
partToScale.CanCollide = false
-- Erstellen Sie ein Twist und spielen Sie es
local tweenObject = TweenService:Create(partToScale, tweenInfo, {Size = TWEEN_SCALE})
tweenObject:Play()
inTween = true
-- Bei der Abwicklung eines Objekts zerstören
tweenObject.Completed:Connect(function()
partToScale:Destroy()
end)
end
end
partToScale.Touched:Connect(onPartTouch)
Farbänderung
Objekte können Farben übertragen, indem sie mit Farb3-Werten tweenen. Zum Instanzkönnen Feinde oder zerstörbare Objekte Farbenblitzen, um Feedback darüber zu geben, dass sie getroffen oder angeklickt wurden.
-- Tweene 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
-- Zwischen variablen
local tweenInfo = TweenInfo.new(
TWEEN_TIME, -- Zeit
Enum.EasingStyle.Exponential, -- Stil einfahren
Enum.EasingDirection.InOut, -- Richtung leiten
0, -- RepeatCount (wenn weniger als null der Tween unbestimmt indefiniert wiederholt)
true -- Rückgänge (tween wird einmal das Ziel erreicht haben)
)
local function activateAction()
-- Wenn das Objekt tweening wird, verhindern Sie, dass es erneut tweening wird
if inTween == true then
return
end
-- Erstellen Sie ein Twist und spielen Sie es
local tweenObject = TweenService:Create(partToTween, tweenInfo, {Color = COLOR_ON_HIT})
tweenObject:Play()
inTween = true
-- Bei der Verarbeitung von tween-Klicks erneut Objekt anklicken
tweenObject.Completed:Connect(function()
inTween = false
-- Erhöhen Sie die Trefferanzahl
hitCount += 1
-- Nach 3 Treffern zerstören Sie das Objekt
if hitCount == 3 then
partToTween:Destroy()
end
end)
end
clickDetector.MouseClick:Connect(activateAction)
Während dieses Skript eine normale Part verwendet, um die Farbe zu ändern, ist es auch möglich, dies auf MeshParts mit einer angewandten Textur zu verwenden. MeshParts werden oft 3D-Modele importiert, anstatt Teile direkt in Roblox Studio zu bauen.
Wenn Sie mit einem vollständig texturierten MeshPart arbeiten, empfehlen wir gefolgte Profile:
Verwenden Sie ein SpecialMesh anstelle eines MeshPart. Dies ist, weil die Textur eines MeshPart die Farbe überschreibt, die vom Skript, das. PL: die Skriptsgetönte wird.
Ändern Sie das Skript, um die VertexColor des SpecialMesh anstelle der Eigenschaftenzu ändern.
Projektbeispiel
Sehen Sie sich alle Skriptbeispiele in diesem nicht kopierbaren Ort an. Holen Sie sich auch alle Skripte zum Ändern.
Enthält Skripte für Rotation, Skalierung und Farbänderung. > |