Parçaları animasyonlaştır

*Bu içerik, yapay zekâ (beta) kullanılarak çevrildi ve hatalar içerebilir. Sayfayı İngilizce görüntülemek için buraya tıkla.

Oyuncular, eylemlerinin animasyonlarla bir şey yapıp yapmadığına dair geri bildirim alabilir.Bu, vurulduğunda sallanan bir ağaç veya beslendiğinde sevinçle atlayan bir evcil hayvan olabilir.Bu durumda, oyuncu buna tıkladığında hareket eden bir düğme nasıl yapılacağını göstereceğiz.

Animasyonlarla gençleşme

Nesneleri animasyon yapmanın bir yolu, gençleri kullanmaktır.Bir geçiş , arada kalan için kısa, belirli bir süre boyunca başlangıç değerini bitiş değerine değiştirme sürecidir.Delikanlılar, konum, renk veya dönüş gibi özellikleri değiştirmek için kullanılabilir.

Proje kurulumu

Bu proje için, bir genç, bir nesneyi başlangıç konumundan hedef konumuna taşıyacaktır.

  1. Animasyon yapacağınız parçayı belirleyin. Aşağıdaki örnekte, 1 düğme ve 2 duvar.

  2. Hareket edecek parçada, bir TıklamaDedektörü ve TweenMove adlı bir senaryo ekleyin. ClickDetector'un adını değiştirmeyin.

  3. TweenMove skriptini açın. Ardından, aşağıdaki kodu kopyalayıp yapıştırın.


    -- Seçilen bir eksen üzerine gidip gelerek bir parçayı ikiye bölün
    -- Butonun bir aç/kapat durumu vardır ve parçayı ileri veya geri hareket ettirir
    local TweenService = game:GetService("TweenService")
    local button = script.Parent
    local clickDetector = button:FindFirstChildWhichIsA("ClickDetector")
    local buttonState = -1 -- Buton yönünü belirler; -1 içeri basacağını, 1 çıkacağını ifade eder
    local inTween = false
    -- Özelleştirilebilir değişkenler
    local TWEEN_TIME = 0.15
    local TWEEN_MOVE_DISTANCE = 1.5
    -- Geçici değişkenler
    local buttonTweenInfo = TweenInfo.new(
    TWEEN_TIME, -- Süre
    Enum.EasingStyle.Quad, -- Kolaylaştırma Stili
    Enum.EasingDirection.Out -- Kolaylaştırma Yönü
    )
    local function buttonPress()
    -- Buton kayboluyorsa, tekrar kullanılmasını engelle
    if inTween == true then
    return
    end
    -- Buton konumu için yeni CFrame hesapla
    local offsetCFrame = CFrame.new(0, TWEEN_MOVE_DISTANCE * buttonState, 0)
    local newCFrame = button.CFrame:ToWorldSpace(offsetCFrame)
    -- Bir genç oluştur ve oynat
    local tweenButton = TweenService:Create(button, buttonTweenInfo, {CFrame = newCFrame})
    tweenButton:Play()
    inTween = true
    -- Orta bitişte, düğmeyi tekrar kullanılabilir hale getir
    tweenButton.Completed:Connect(function()
    inTween = false
    -- Buton durumunu tersine çevir
    buttonState *= -1
    end)
    end
    clickDetector.MouseClick:Connect(buttonPress)
  4. Oyun testi yap ve nesneye tıkla.Test sırasında, nesnenin yanlış yönde veya mesafede hareket ettiğini fark edebilirsiniz.Bunlar bir sonraki bölümde özelleştirilebilir.

Yanlış yön; ayar gerektirir
Doğru hareket eder; ayar gerekmez

Hareket geçişini ayarla

Senaryo eklenince, oyununuzun ihtiyaçlarına göre özelleştirebilirsiniz.Buton, ileri veya geri, yukarı veya aşağı gibi yönlerde hareket etmek için kaydırılabilir.

Pozisyonu değiştir

Unutmayın, gençler bir başlangıç değerinden bir hedef değerine geçer.Bu senaryo, düğmeyi mevcut konumuna göre bir yönde hareket ettirmek için CFrames kullanır.Bu yön, senaryonun 28. satırında kontrol edilir.

Bu satırda, X, Y ve Z koordinatları kullanılarak yeni bir CFrame oluşturulur. Bu örnekte, düğme Y eksenine göre hareket eder.


-- Buton konumu için yeni CFrame hesapla
local offsetCFrame = CFrame.new(0, TWEEN_MOVE_DISTANCE * buttonState, 0)
local newCFrame = button.CFrame:ToWorldSpace(offsetCFrame)

Butonun farklı bir yönde hareket etmesini sağlamak için, arzu edilen koordinatlardan birini çizgi ile değiştirin: .Diğer tüm koordinatları 0'a ayarlayın.

Örneğin, bu satır onu X eksenine göre hareket ettirecektir.


-- Buton konumu için yeni CFrame hesapla
local offsetCFrame = CFrame.new( TWEEN_MOVE_DISTANCE * buttonState, 0, 0)
local newCFrame = button.CFrame:ToWorldSpace(offsetCFrame)

Geçiş süresi ve mesafe

Senaryo, genç hareketini etkileyen aşağıdaki değişkenleri içerir.TWEEN_TIME gibi başlıklı isimler özellikle bu senaryo değiştirilmek üzere yazılır.

Aşağıdaki bir değişkenin değerini değiştirmeyi deneyin:

  • Satır 11 - TWEEN_TIME : Bir genç oluşması için gereken süre (saniye).
  • Satır 12 - TWEEN_MOVE_DISTANCE : Düğme üzerinde hareket eden mesafe.

Diğer özellikler arasında gezinme

Sayısal veri türüne sahip çoğu özellik aralıklandırılabilir.Bu bölüm, dönüş gibi bazı yaygın özellikleri içerir, ki bunlar oyununuza daha fazla oyuncu geri bildirimi getirmek için kullanılabilir.Unutmayın, aynı anda birden fazla özellik de tutabilirsiniz.

Tüm özellikler için bir liste görmek için TweenService API sayfasına bakın.

Döndür

Döndürme için, sadece Vector3 kullanmak yerine tweening ve CFrames'i birleştirin.Döndürme gençleri, yaratıkların evcil hayvan olarak sarsılmasını sağlamak veya para döndürülürken dönmesi için kullanılabilir.

Sonraki senaryo örneğinde, yaratığın konumu ve dönüşü, evcil hayvan olurken ne kadar mutlu olduğunu göstermek için tıklandığında her ikisi de azaltılır.

Aşağıdaki kod, bir nesneyi TWEEN_ROT_ANGLES 'deki derece sayısına göre döndürecektir.


-- Nesneyi döndürmek ve atlamak için tween kullanır
local TweenService = game:GetService("TweenService")
local partToTween = script.Parent
local clickDetector = partToTween:FindFirstChildWhichIsA("ClickDetector")
local inTween = false
-- Özelleştirilebilir değişkenler
local TWEEN_TIME = 0.25
local TWEEN_ROT_ANGLES = -45
local TWEEN_MOVE_DISTANCE = 3
-- Geçici değişkenler
local tweenInfo = TweenInfo.new(
TWEEN_TIME, -- Süre
Enum.EasingStyle.Quad, -- Kolaylaştırma Stili
Enum.EasingDirection.Out, -- Kolaylaştırma Yönü
1, -- Tekrarlama sayısı (sıfırdan az ise genç sonsuza dek dönecek) RepeatCount (when less than zero the tween will loop indefinitely)
true -- Geri dönüşler (hedefe ulaştığında bir kez tersine dönecek)
)
local function activateAction()
-- Eğer nesne ortadan kalkıyorsa, tekrar ortadan kalkmasını engelle
if inTween == true then
return
end
-- Nesne konumu ve dönüşü için yeni CFrame hesapla
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)
-- Bir genç oluştur ve oynat
local tweenObject = TweenService:Create(partToTween, tweenInfo, {CFrame = newCFrame})
tweenObject:Play()
inTween = true
-- Orta bitişte, nesneyi tekrar tıklanabilir hale getirin
tweenObject.Completed:Connect(function()
inTween = false
end)
end
clickDetector.MouseClick:Connect(activateAction)

Boyut

Oyun içi nesnelerin boyutunu değiştirmek, bir oyuncunun onlarla etkileşim kurduğunu da gösterebilir.durum, sağlık paketleri veya mücevher gibi alımlar dokunulduğunda küçülebilir.Parçaları ölçeklendirmek için, arzu edilen boyuta sahip yeni bir Vector3'e hedefi değiştirin.


-- Dokunulduğunda bir parçanın ölçeğini azalt ve ardından yok et
local TweenService = game:GetService("TweenService")
local partToScale = script.Parent
local inTween = false
-- Özelleştirilebilir değişkenler
local TWEEN_TIME = 1
local TWEEN_SCALE = Vector3.zero
-- Geçici değişkenler
local tweenInfo = TweenInfo.new(
TWEEN_TIME, -- Süre
Enum.EasingStyle.Exponential, -- Kolaylaştırma Stili
Enum.EasingDirection.Out -- Kolaylaştırma Yönü
)
local function onPartTouch(otherPart)
-- Eğer nesne ortadan kalkıyorsa, tekrar ortadan kalkmasını engelle
if inTween == true then
return
end
local partParent = otherPart.Parent
local humanoid = partParent:FindFirstChildWhichIsA("Humanoid")
if humanoid then
-- Nesne alındığından bu yana daha fazla çarpışmayı engelleme
partToScale.CanCollide = false
-- Bir genç oluştur ve oynat
local tweenObject = TweenService:Create(partToScale, tweenInfo, {Size = TWEEN_SCALE})
tweenObject:Play()
inTween = true
-- Ortağın bitiminde, nesneyi yok edin
tweenObject.Completed:Connect(function()
partToScale:Destroy()
end)
end
end
partToScale.Touched:Connect(onPartTouch)

Renk değişikliği

Parçalar, Renk3 değerleriyle geçiş renklerine sahip olabilir.durum, düşmanlar veya yok edilebilir nesneler, vurulduklarına veya tıklandıklarına geri bildirim vermek için renkleri yansıtabilir.


-- Bir nesnenin rengini tıkladıktan sonra 3 tıklama sonra yok edin
local TweenService = game:GetService("TweenService")
local partToTween = script.Parent
local clickDetector = partToTween:FindFirstChildWhichIsA("ClickDetector")
local inTween = false
-- Özelleştirilebilir değişkenler
local TWEEN_TIME = 0.2
local COLOR_ON_HIT = Color3.fromRGB(255, 0, 50)
local hitCount = 0
-- Geçici değişkenler
local tweenInfo = TweenInfo.new(
TWEEN_TIME, -- Süre
Enum.EasingStyle.Exponential, -- Kolaylaştırma Stili
Enum.EasingDirection.InOut, -- Kolaylaştırma Yönü
0, -- Tekrarlama sayısı (sıfırdan az ise genç sonsuza dek dönecek) RepeatCount (when less than zero the tween will loop indefinitely)
true -- Geri dönüşler (hedefe ulaştığında bir kez tersine dönecek)
)
local function activateAction()
-- Eğer nesne ortadan kalkıyorsa, tekrar ortadan kalkmasını engelle
if inTween == true then
return
end
-- Bir genç oluştur ve oynat
local tweenObject = TweenService:Create(partToTween, tweenInfo, {Color = COLOR_ON_HIT})
tweenObject:Play()
inTween = true
-- Orta bitişte, nesneyi tekrar tıklanabilir hale getirin
tweenObject.Completed:Connect(function()
inTween = false
-- Artırma hit sayısı
hitCount += 1
-- 3 vuruştan sonra, nesneyi yok edin
if hitCount == 3 then
partToTween:Destroy()
end
end)
end
clickDetector.MouseClick:Connect(activateAction)

Bu senaryo renk değiştirmek için normal bir Parça kullanırken, bunu uygulanmış bir dokuyla MeshParts'a da uygulamak mümkündür.MeshParts genellikle Roblox Studio'da doğrudan oluşturulan parçalar yerine 3B modelleri ithal edilir.

Tamamen dokulu bir MeshPart ile çalışıyorsanız, takip edilenönerilerde bulunuruz:

  1. Bir MeshPart yerine Özel Bir Mesh kullanın. Bunun nedeni, bir MeshPart'ın dokusunun, senaryo tarafından renklendirilen rengi geçersiz kılmasıdır.

  2. Renk özelliği yerine Özel Dokunun VertexColor'unu değiştirmek için kodu değiştirin.

Proje örneği

Bu kopyalanmamış dünyatüm senaryo örneklerini görün. Ayrıca değiştirmek için tüm senaryoları alın.

Döndürme, ölçeklendirme ve renk değişikliği tweenleri için kodları içerir.