Orta seviye öğreticiler

Karakter animasyonlarını oynatma

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

Karakter animasyonlarını oynatmak, avatarları ve oynanabilir olmayan karakterleri (NPC'ler) ifade edici, gerçekçi ve izleyicilerinizle çekici kılan önemli bir parçadır. Sadece sürükleyici görseller sağlamakla kalmaz, aynı zamanda karakter animasyonları oyunculara eylemlerinden geri bildirim verir, çevreyi nasıl gezinecekleri hakkında rehberlik eder ve kendi karakterleri ile diğerleri hakkında hayati bilgiler sunar.

Tehlikeli Uzay İstasyonu .rbxl dosyasını referans alarak, bu öğretici size iki farklı teknik kullanarak karakter animasyonlarını nasıl oynatacağınızı gösterir ve bununla birlikte:

  • Varsayılan karakter animasyon varlık kimliklerini kendi özel animasyonlarınızla değiştirme.
  • 3D alanda karakter eylemlerine yanıt olarak animasyonları tetikleme.

Bu öğreticiyi tamamladıktan sonra, çeşitli oyun durumları için animasyonları özelleştirme becerisine sahip olacaksınız.

Varsayılan animasyonları değiştirme

Varsayılan bir Humanoid nesnesine sahip her karakter, ister oyuncu tarafından kontrol edilen bir avatar isterse bir oyuncu olmayan karakter (NPC) olsun, belirli deneyim içi eylemler gerçekleştirdiklerinde oynatılan bir dizi varsayılan animasyon içerir. Roblox, bu animasyonları her deneyim için ek bir script çabası olmadan kutudan çıkarır.

Varsayılan Düşme Animasyonu
Varsayılan Yüzme Animasyonu
Varsayılan Tırmanma Animasyonu

Ancak, bu varsayılan animasyonlar dünyanın ortamı, estetiği veya genel anlatımı için tasarım gereksinimlerinizi karşılamıyorsa, bunları deneyiminize katılan her oyuncuya uygulanacak özel animasyonlarla değiştirebilirsiniz.

Demonstrasyon amacıyla, aşağıdaki bölüm varsayılan yürüme animasyonunu Karakter Animasyonları Oluştur bölümünden bir özel yürüme döngüsü animasyonu ile değiştirmeyi öğretmektedir. Bu aynı işlem ile, istediğiniz herhangi bir varsayılan animasyonu kendi animasyon varlık kimliklerinizle değiştirebilirsiniz.

Varsayılan Yürüyüş Animasyonu
Özel Yürüyüş Animasyonu

Script oluşturma

Her karakterin Humanoid nesnesi, karakterin tüm varsayılan animasyonlarını depolayan bir çocuk Animator nesnesi içerir. Bu varsayılan animasyonlardan herhangi birini yeni varlık kimlikleri olarak ayarlamak için, ServerScriptService içinde bir script oluşturmalısınız, böylece oyuncular deneyime yüklendiği anda Animator nesnesinin varsayılan değerlerini referans alıp geçersiz kılabilir.

Varsayılan animasyon varlık kimliklerini referans alacak bir script oluşturmak için:

  1. Explorer penceresinde, ServerScriptService'e yeni bir script ekleyin.

    1. ServerScriptService üzerine gelin ve ⊕ butonuna tıklayın.
    2. Bağlam menüsünden bir Script ekleyin.
  2. Yeni scriptte aşağıdaki kodu yapıştırın:


    local Players = game:GetService("Players")
    local function onCharacterAdded(character)
    local humanoid = character:WaitForChild("Humanoid")
    local animator = humanoid:WaitForChild("Animator")
    print("Animator bulundu!")
    end
    local function onPlayerAdded(player)
    player.CharacterAdded:Connect(onCharacterAdded)
    end
    Players.PlayerAdded:Connect(onPlayerAdded)

ResetDefaultAnimations scripti, sunucuya bağlanan oyuncular için tüm Player nesnelerini içeren Players hizmetini alarak başlar. Her oyuncunun karakteri deneyime yüklendiğinde, onCharacterAdded fonksiyonu karakterin Humanoid ve Animator nesnelerini tespit edene kadar bekler.

İlk kez Animator nesnesi tespit edildiğinde, script "Animator bulundu!" mesajını yazdırarak scriptin amacına uygun çalıştığını size bildirir.

Varlık kimliğini değiştirme

Artık scriptinizin, oyuncular sunucuya yüklenip bağlandığında tespit edebileceğini bildiğinize göre, kendi özel animasyonlarınızla değiştirmek istediğiniz animasyon kimlik(ler)ini özellikle referans alacak şekilde scriptinizi değiştirebilirsiniz.

Aşağıdaki tablo, Animator nesnesinde çağırabileceğiniz ve değiştirebileceğiniz tüm varsayılan karakter animasyonlarını içermektedir. Idle durumunun, daha sık veya daha az sık oynatılacak iki varyasyonu olduğunu unutmayın.

Karakter EylemiAnimasyon Script Referansı
KoşanimateScript.run.RunAnim.AnimationId
YürüanimateScript.walk.WalkAnim.AnimationId
ZıplaanimateScript.jump.JumpAnim.AnimationId
Idle

animateScript.idle.Animation1.AnimationId
animateScript.idle.Animation2.AnimationId

DüşanimateScript.fall.FallAnim.AnimationId
YüzanimateScript.swim.Swim.AnimationId
Yüz (Idle)animateScript.swimidle.SwimIdle.AnimationId
TırmananimateScript.climb.ClimbAnim.AnimationId

Varsayılan yürüme animasyon varlık kimliğini değiştirmek için:

  1. Varsayılan yürüme animasyon script referansını çağırın, ardından varlık kimliğini kendi özel animasyon varlık kimliğinizle değiştirin. Örneğin, aşağıdaki kod örneği, Karakter Animasyonları Oluştur bölümündeki yürüme döngüsü animasyonunu referans alır.


    local Players = game:GetService("Players")
    local function onCharacterAdded(character)
    local humanoid = character:WaitForChild("Humanoid")
    local animator = humanoid:WaitForChild("Animator")
    print("Animator bulundu!")
    local animateScript = character:WaitForChild("Animate")
    animateScript.walk.WalkAnim.AnimationId = "rbxassetid://122652394532816"
    end
    local function onPlayerAdded(player)
    player.CharacterAdded:Connect(onCharacterAdded)
    end
    Players.PlayerAdded:Connect(onPlayerAdded)
  2. Özel yürüme animasyonunuzun varsayılan animasyonu geçersiz kıldığından emin olmak için deneyiminizi test edin.

    1. Aşağı açılır menüden Test seçeneğini seçin ve sağındaki Oynat butonuna tıklayın.

      Studio'nun mezzaninindeki test modları açılır menüsünde Test seçeneği.
    2. Avatarınızla uzay istasyonunda yürüyün.

Animasyonları tetikleme

Önceki teknik, bir karakterin belirli deneyim içi eylemleri gerçekleştirdiğinde otomatik olarak oynatılan varsayılan animasyonları değiştirmeye odaklanıyorken, 3D alandaki herhangi bir karakter eylemi, örneğin bir nesneyi almak veya bir tehlikeden hasar almak gibi, animasyonları programatik olarak tetikleyebilirsiniz.

Bu örnekte, oyuncular altın platforma dokunduğunda, varsayılan olmayan bir karakter dans animasyonunu tetiklemektedirler.

Animasyonları oynatma şekli, oyunculara çevrelerindeki nesnelerle nasıl etkileşimde bulunmaları gerektiği konusunda anında geri bildirim sağladığı için yararlıdır. Gösterim amacıyla, aşağıdaki bölüm, karakterler tehlikeli buhar sızıntılarına çok yakın olduğunda bir animasyonu tetiklemeyi gösterir; bu, oyunculara duvarların yanına yürümekten kaçınmaları gerektiğini ince bir şekilde öğretme yöntemidir.

Hacim ekleme

Benzersiz oyun davranışlarını tetiklemenin en yaygın yollarından biri, hacimler veya 3D alandaki görünmez bölgeleri kullanarak karakterlerin veya nesnelerin çevrelerindeki belirli alanlarla etkileşime geçip geçmediğini algılamaktır. Hacimleri scriptlerle birleştirdiğinizde, çarpışma geri bildirimlerini kullanarak programatik olarak eylemleri tetikleyebilir, örneğin oyuncunun sağlığını azaltmak veya bir animasyonu oynatmak gibi.

Bir malikanenin odasının uzaktan görünümü. Odanın ortasında, oyun olaylarını tetikleyen hacmi belirtmek için bir kutunun çizgisi vardır.
Duvall Drive'ın Gizemi, odanın görsel görünümünü değiştiren oyun olaylarını tetiklemek için hacimler kullanıyor.

Deneyiminize bir hacim eklerken, sadece animasyonunuzu tetiklemek istediğiniz alanı kaplayacak şekilde ölçeklendirmek önemlidir. Hacminizi çok küçük yaparsanız, oyuncular animasyonu oynatmak için o alana asla çarpışmayabilir; tersine, hacminizi çok büyük yaparsanız, animasyon nesneye veya ilgi alanına ulaşmadan önce oynatılır ve ne yaptıklarını tetiklemek için ne yaptıklarını anlayamayabilirler.

Bir buhar sızıntısının etrafına bir hacim eklemek için:

  1. Explorer penceresinde, yeni bir blok parçası ekleyin.
  2. Bloğu yerleştirip boyutlandırın ve animasyonunuzu tetiklemek istediğiniz alanı kapsayacak şekilde ayarlayın.
  3. Properties penceresinde,
    1. AdAnimationDetector olarak ayarlayın.

    2. Bloğun görünmez olması için Şeffaflık1 olarak ayarlayın.

      Bir buhar çıkışının etrafında hacmi belirtmek için görünür bir kutunun çizgisi.

Script oluşturma

Artık animasyonunuzu tetiklemek için tanımlı bir bölgeniz olduğuna göre, oyuncular hacme çarptığında programatik olarak tespit eden bir script oluşturma zamanı. Oyun gereksinimlerinize uygun her animasyonu tetiklemek için çarpışma olaylarını dinleyebilirsiniz.

Örneğin, bu animasyon tekniği, hacme çarptıklarında oyunculara anında geri bildirim sağlamak için bir LocalScript kullanır. Eğer sunucu çarpışmayı dinleseydi ve animasyonu oynatsaydı, oyuncunun hacme çarpması ile animasyonun oynatılması arasında bir gecikme olabilirdi, çünkü sunucudan istemciye kopyalama süresi vardır.

Yerel oyuncunun karakterinin hacme dokunduğunda tespit edecek bir yerel script oluşturmak için:

  1. Explorer penceresinde, StarterCharacterScripts'e yeni bir script ekleyin. Bu yerleşim, scriptin ve alt bileşenlerinin oyuncu karakterinde katılma sırasında ve deneyime geri döndüğünde kopyalanmasını sağlar.

    1. StarterPlayer'ı genişletin, ardından StarterCharacterScripts alt çocuğuna gelin ve ⊕ butonuna tıklayın.
    2. Bağlam menüsünden bir LocalScript ekleyin ve adını TriggerAnimation olarak değiştirin.
  2. Yeni scriptte aşağıdaki kodu yapıştırın:


    local Workspace = game:GetService("Workspace")
    local animation = script:WaitForChild("Animation")
    local humanoid = script.Parent:WaitForChild("Humanoid")
    local animator = humanoid:WaitForChild("Animator")
    local animationTrack = animator:LoadAnimation(animation)
    local animationDetector = Workspace:WaitForChild("AnimationDetector")
    local debounce = false
    animationDetector.Touched:Connect(function(hit)
    if debounce then
    return
    end
    local hitCharacter = hit:FindFirstAncestorWhichIsA("Model")
    if hitCharacter ~= localCharacter then
    return
    end
    debounce = true
    animationTrack:Play()
    animationTrack.Ended:Wait()
    debounce = false
    end)

TriggerAnimation scripti, 3D dünyada mevcut olan tüm nesneleri içeren Workspace hizmetini alarak başlar. Bu, scriptin hacim olarak işlev gören Part nesnesini referans alabilmesi için önemlidir.

Her oyuncu karakteri deneyime yüklendiğinde veya geri döndüğünde script, bekler:

  • Ekleyeceğiniz çocuk Animation nesnesi,
  • Karakterin Humanoid ve Animator nesneleri,
  • Çalışma alanındaki AnimationDetector hacmi nesnesi.

Hacime herhangi bir şey çarptığında, Touched olay işleyici fonksiyonu, hacme çarpan BasePart nesnesinin bir çocuğu olan ilk ataşeyi alır; bu muhtemelen çarpışmanın bir karaktere ait olup olmadığını kontrol eder. Eğer öyleyse, fonksiyon ardından yerel oyuncunun karakteri olup olmadığını kontrol eder. Eğer öyleyse, fonksiyon:

  • Debounce'u true yapar.
  • Animasyonu oynatır ve sonunda bitmesini bekler.
  • Debounce'u false yapar.

Animasyonun sürekli tetiklenmesini önlemek için debounce'u false'dan true'ya, ardından tekrar false'ya ayarlamak, birtakım çarpışmalar sırasında animasyonu sürekli olarak tetiklemeyi önleyen bir debounce desenidir. Daha fazla bilgi için Çarpışmaları tespit etme bölümüne bakın.

Animasyon ekleme

Eğer deneyiminizi şimdiden test etmeye başlarsanız, TriggerAnimation scriptiniz hala yerel oyuncunun hacme çarpması sonucunda bir animasyon oynatamaz. Bunun sebebi, referans alabileceği bir animasyon varlık kimliği bekleyen bir çocuk Animation nesnesidir ve bu Animation nesnesi şu anda mevcut değildir.

Yerel scriptin hacme çarpma durumunda referans alabileceği bir animasyon eklemek için:

  1. Explorer penceresinde, TriggerAnimation'a yeni bir animasyon ekleyin.

    1. TriggerAnimation üzerine gelin ve ⊕ butonuna tıklayın.
    2. Bağlam menüsünden bir Animation ekleyin.
  2. Yeni animasyon nesnesini seçin, ardından Properties penceresinde AnimationID değerini, oyuncular hacme dokunduğunda tetiklemek istediğiniz animasyon varlık kimliği ile ayarlayın. Örneğin, Tehlikeli Uzay İstasyonu örneği, karakterin geriye doğru düştüğü bir animasyonu oynatmak için rbxassetid://3716468774 referansı kullanmaktadır.

  3. Deneyiminizi test edin ve oyuncular ilk buhar sızıntısına yaklaştıklarında animasyonun oynatıldığından emin olun.

©2026 Roblox Corporation. Roblox, the Roblox logo and Powering Imagination are among our registered and unregistered trademarks in the U.S. and other countries.