Animuj części

*Ta zawartość została przetłumaczona przy użyciu narzędzi AI (w wersji beta) i może zawierać błędy. Aby wyświetlić tę stronę w języku angielskim, kliknij tutaj.

Gracze mogą otrzymać informacje zwrotne, czy ich działania robią coś z animacjami.Może to być drzewo potrząsające się po uderzeniu lub zwierzak wesoło odbijający się po zjedzeniu.W tym przypadku pokażemy ci, jak stworzyć przycisk, który się porusza, gdy gracz go kliknie.

Tween z animacjami

Jednym ze sposobów animowania obiektów jest używanie nastolatków.A przejście , skrót dla pomiędzy, to proces zmiany początkowej wartości na końcową wartość w ciągu pewnej ilości czasu.Nastolatki mogą być używane do zmiany właściwości, takich jak pozycja, kolor lub obrót.

Ustawienie projektu

W tym projekcie nastolatek przeniesie obiekt z pozycji startowej do pozycji docelowej.

  1. Określ, jaką część będziesz animować. W przykładzie poniżej 1 jest przyciskiem, a 2 jest ścianą.

  2. W części, która się poruszy, dodaj ClickDetector i skrypt o nazwie TweenMove. Nie zmieniaj nazwy ClickDetector.

  3. Otwórz skrypt TweenMove. Następnie skopiuj i wklej poniższy skrypt.


    -- Nastolatki obracają część wstecz i do przodu w oparciu o wybrany osi
    -- Przycisk ma stan włączony/wyłączony, który przesuwa część do przodu lub do tyłu
    local TweenService = game:GetService("TweenService")
    local button = script.Parent
    local clickDetector = button:FindFirstChildWhichIsA("ClickDetector")
    local buttonState = -1 -- Określa kierunek przycisku; -1 oznacza, że naciśnie, 1 oznacza, że wyskoczy
    local inTween = false
    -- Dostosowywalne zmienne
    local TWEEN_TIME = 0.15
    local TWEEN_MOVE_DISTANCE = 1.5
    -- Zmienne w wieku średnim
    local buttonTweenInfo = TweenInfo.new(
    TWEEN_TIME, -- Czas
    Enum.EasingStyle.Quad, -- Styl ułatwiania
    Enum.EasingDirection.Out -- Łatwienie kierunku
    )
    local function buttonPress()
    -- Jeśli przycisk jest przesuwany, zapobiegnij ponownemu jego użyciu
    if inTween == true then
    return
    end
    -- Oblicz nowe CFrame dla pozycji przycisku
    local offsetCFrame = CFrame.new(0, TWEEN_MOVE_DISTANCE * buttonState, 0)
    local newCFrame = button.CFrame:ToWorldSpace(offsetCFrame)
    -- Stwórz nastolatek i zagraj w niego
    local tweenButton = TweenService:Create(button, buttonTweenInfo, {CFrame = newCFrame})
    tweenButton:Play()
    inTween = true
    -- Po ukończeniu nastolatka ponownie użyj przycisku
    tweenButton.Completed:Connect(function()
    inTween = false
    -- Odwróć stan przycisku
    buttonState *= -1
    end)
    end
    clickDetector.MouseClick:Connect(buttonPress)
  4. Przetestuj i kliknij obiekt.Podczas testowania możesz zauważyć, że obiekt porusza się w niewłaściwym kierunku lub odległości.Można to dostosować w następnej sekcji.

Niewłaściwy kierunek; potrzebuje korekty
Porusza się prawidłowo; nie jest potrzebna korekta

Dostosuj przeniesienie tween

Po dodaniu skryptu możesz go dostosować do potrzeb swojej gra.Przycisk można przesunąć, aby poruszać się w kierunkach takich jak przód i wstecz, lub w górę i w dół.

Zmień pozycję

Pamiętaj, nastolatki przechodzą z wartości początkowej do wartości docelowej.Ten skrypt używa CFrames, aby przesunąć przycisk w kierunku odpowiadającym jego obecnej pozycji.Kierunek ten jest kontrolowany w Linii 28 skryptu.

Na tej linii nowy CFrame jest tworzony za pomocą koordynatów X, Y i Z. W tym przykładzie przycisk porusza się względem osi Y.


-- Oblicz nowe CFrame dla pozycji przycisku
local offsetCFrame = CFrame.new(0, TWEEN_MOVE_DISTANCE * buttonState, 0)
local newCFrame = button.CFrame:ToWorldSpace(offsetCFrame)

Aby przycisk poruszał się w innym kierunku , po prostu zastąp jedną z pożądanych koordynatów linią: .Ustaw wszystkie pozostałe koordynaty na 0.

Na przykład ta linia przeniesie ją względem jej osi X.


-- Oblicz nowe CFrame dla pozycji przycisku
local offsetCFrame = CFrame.new( TWEEN_MOVE_DISTANCE * buttonState, 0, 0)
local newCFrame = button.CFrame:ToWorldSpace(offsetCFrame)

Czas i odległość dojrzewania

Skrypt zawiera następujące zmienne, które wpływają na ruch nastolatka.Nazwy z dużą literą, takie jak TWEEN_TIME, są przeznaczone specjalnie do zmiany tego skryptu.

Spróbuj zmienić wartość jednej zmiennej poniżej:

  • Linia 11 - TWEEN_TIME : Czas w sekundach, jaki zajmuje wydarzenie nastolatka.
  • Linia 12 - TWEEN_MOVE_DISTANCE : Odległość, w jakiej przycisk się porusza w szpilkach.

Przełączanie innych właściwości

Większość właściwości z typem danych liczbowym może być przetworzona.Ta sekcja zawiera niektóre wspólne właściwości, takie jak rotacja, które można wykorzystać do przyniesienia więcej opinii graczy do twojej gry.Pamiętaj, że możesz również przełączać wiele właściwości na raz.

Aby uzyskać pełną listę właściwości, zobacz stronę TweenService.

Obróć

Aby obrócić, połącz tweening i CFrames zamiast po prostu używać Vector3.Teenowcy rotacji mogą być używani, aby stworzenia machały, gdy są pieszczone, lub monety wirują, gdy są podniesione.

W następnym przykładzie skryptu pozycja i rotacja stworzenia są obrabiane, gdy kliknięto, aby pokazać, jak jest szczęśliwe, gdy jest pieszczone.

Kod poniżej obróci obiekt w oparciu o liczbę stopni w TWEEN_ROT_ANGLES .


-- Używa tween, aby obiekt obrócił się w górę i odbił
local TweenService = game:GetService("TweenService")
local partToTween = script.Parent
local clickDetector = partToTween:FindFirstChildWhichIsA("ClickDetector")
local inTween = false
-- Dostosowywalne zmienne
local TWEEN_TIME = 0.25
local TWEEN_ROT_ANGLES = -45
local TWEEN_MOVE_DISTANCE = 3
-- Zmienne w wieku średnim
local tweenInfo = TweenInfo.new(
TWEEN_TIME, -- Czas
Enum.EasingStyle.Quad, -- Styl ułatwiania
Enum.EasingDirection.Out, -- Łatwienie kierunku
1, -- RepeatCount (gdy mniej niż zero, nastolatek będzie się powtarzał bez końca)
true -- Odwrócenia (tween odwróci się, gdy osiągnie swój cel)
)
local function activateAction()
-- Jeśli obiekt jest przejściowy, zapobiegnij ponownemu przejściu
if inTween == true then
return
end
-- Oblicz nowe CFrame dla pozycji i rotacji obiektu
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)
-- Stwórz nastolatek i zagraj w niego
local tweenObject = TweenService:Create(partToTween, tweenInfo, {CFrame = newCFrame})
tweenObject:Play()
inTween = true
-- Po ukończeniu nastolatka ponownie uczyń obiekt klikalnym
tweenObject.Completed:Connect(function()
inTween = false
end)
end
clickDetector.MouseClick:Connect(activateAction)

Skalę

Zmiana rozmiaru obiektów w grze może również pokazać, że gracz z nimi interakował.Na instancja, odbiory, takie jak pakiety zdrowia lub klejnoty, mogą się skurczyć po dotknięciu.Aby skalować części, zmień cel tween na nowy Vector3 o żądanym rozmiarze.


-- Przesuń skalę części, gdy zostanie dotknięta, a następnie ją zniszcz
local TweenService = game:GetService("TweenService")
local partToScale = script.Parent
local inTween = false
-- Dostosowywalne zmienne
local TWEEN_TIME = 1
local TWEEN_SCALE = Vector3.zero
-- Zmienne w wieku średnim
local tweenInfo = TweenInfo.new(
TWEEN_TIME, -- Czas
Enum.EasingStyle.Exponential, -- Styl ułatwiania
Enum.EasingDirection.Out -- Łatwienie kierunku
)
local function onPartTouch(otherPart)
-- Jeśli obiekt jest przejściowy, zapobiegnij ponownemu przejściu
if inTween == true then
return
end
local partParent = otherPart.Parent
local humanoid = partParent:FindFirstChildWhichIsA("Humanoid")
if humanoid then
-- Unikaj dalszych kolizji z obiektem, ponieważ został odebrany
partToScale.CanCollide = false
-- Stwórz nastolatek i zagraj w niego
local tweenObject = TweenService:Create(partToScale, tweenInfo, {Size = TWEEN_SCALE})
tweenObject:Play()
inTween = true
-- Po ukończeniu nastolatka zniszcz obiekt
tweenObject.Completed:Connect(function()
partToScale:Destroy()
end)
end
end
partToScale.Touched:Connect(onPartTouch)

Zmiana koloru

Części mogą przełączać kolory poprzez przejście z wartościami Color3.Na instancjawrogowie lub zniszczalne obiekty mogą migotać kolorami, aby dać informację zwrotną, że zostały uderzeni lub kliknięci.


-- Przekliknij kolor obiektu po kliknięciu i usuń go po 3 kliknięciach
local TweenService = game:GetService("TweenService")
local partToTween = script.Parent
local clickDetector = partToTween:FindFirstChildWhichIsA("ClickDetector")
local inTween = false
-- Dostosowywalne zmienne
local TWEEN_TIME = 0.2
local COLOR_ON_HIT = Color3.fromRGB(255, 0, 50)
local hitCount = 0
-- Zmienne w wieku średnim
local tweenInfo = TweenInfo.new(
TWEEN_TIME, -- Czas
Enum.EasingStyle.Exponential, -- Styl ułatwiania
Enum.EasingDirection.InOut, -- Łatwienie kierunku
0, -- RepeatCount (gdy mniej niż zero, nastolatek będzie się powtarzał bez końca)
true -- Odwrócenia (tween odwróci się, gdy osiągnie swój cel)
)
local function activateAction()
-- Jeśli obiekt jest przejściowy, zapobiegnij ponownemu przejściu
if inTween == true then
return
end
-- Stwórz nastolatek i zagraj w niego
local tweenObject = TweenService:Create(partToTween, tweenInfo, {Color = COLOR_ON_HIT})
tweenObject:Play()
inTween = true
-- Po ukończeniu nastolatka ponownie uczyń obiekt klikalnym
tweenObject.Completed:Connect(function()
inTween = false
-- Zwiększ liczbę trafień
hitCount += 1
-- Po 3 trafieniach zniszcz obiekt
if hitCount == 3 then
partToTween:Destroy()
end
end)
end
clickDetector.MouseClick:Connect(activateAction)

Chociaż ten skrypt używa normalnej części, aby zmienić kolor, można również używać tego na MeshParts z zastosowaną teksturą.MeshParts są często importowane modele 3D, zamiast części budowane bezpośrednio w Roblox Studio.

Jeśli pracujesz z w pełni teksturowaną częścią siatki, zalecamy obserwujedziałania:

  1. Użyj specjalnej siatki zamiast części siatki. Dzieje się tak, ponieważ tekstura siatki MeshPart zastępuje kolor przetwarzany przez skrypt.

  2. Zmień skrypt, aby zmodyfikować kolor VertexColor specjalnej siatki zamiast właściwości koloru.

Próbka projektu

Zobacz wszystkie przykłady skryptów w tym niezablokowanym miejsce. Zdobądź wszystkie skrypty do modyfikacji również.

Zawiera skrypty do rotacji, skalowania i zmiany koloru nastolatków.