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ı oynatma, avatarları ve oynanabilir olmayan karakterleri (NPC'ler) izleyicilerinize ifadeci, gerçekçi ve ilgi ç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, çevreyi nasıl gezinecekleri konusunda rehberlik ve kendi karakterleri ve diğerleri hakkında hayati bilgiler sunar.

Tehlikeli Uzay İstasyonu .rbxl dosyasını referans alarak, bu eğitimde karakter animasyonlarını iki farklı teknikle nasıl oynatacağınızı gösteriyoruz. Bu teknikler şunları içerir:

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

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

Varsayılan animasyonları değiştir

Varsayılan bir Humanoid nesnesine sahip her karakter, ister oyuncu kontrolündeki bir avatar olsun ister bir oynanabilir olmayan karakter (NPC), belirli oyun içi eylemleri gerçekleştirdiğinde oynatılan bir dizi varsayılan animasyon içerir. Roblox, bu animasyonları her oyun için ek bir betik yazma çabası olmaksızın kutudan çıkar çıkmaz sağlar.

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

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

Göstermek için, aşağıdaki bölüm varsayılan yürüyüş animasyonunu Karakter Animasyonları Oluştur bölümünden bir özel yürüyüş döngüsü animasyonu ile nasıl değiştireceğinizi öğretir. Bu aynı süreçle, varsayılan animasyonlardan herhangi birini kendi animasyon varlık kimliklerinizle değiştirebilirsiniz.

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

Betik oluştur

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 kimliklerine ayarlamak için, oyuncular oyuna yüklendiğinde Animator nesnesinin varsayılan değerlerini referans alıp geçersiz kılacak bir betik oluşturmalısınız.

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

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

    1. ServerScriptService üzerine gelin ve ⊕ butonuna tıklayın.
    2. Bağlam menüsünden bir Script ekleyin.
  2. Yeni betikte, 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 betiği, sunucuya bağlanan tüm Player nesnelerini içeren Players hizmetini alarak başlar. Her oyuncunun karakteri oyuna yüklendiğinde, onCharacterAdded fonksiyonu karakterin Humanoid ve Animator nesnelerini algılayana kadar bekler.

İlk kez bir Animator nesnesi algıladığında, betik "Animator bulundu!" mesajını yazdırarak betiğin beklendiği gibi çalıştığını size bildirir.

Varlık kimliğini değiştir

Artık betiğinizin oyuncuların sunucuya yüklendiğinde algılayabildiğini bildiğinize göre, betiğinizi özel animasyonlarınızla değiştirmek istediğiniz animasyon kimliklerini özellikle referans alacak şekilde değiştirebilirsiniz.

Aşağıdaki tablo, Animator nesnesi içinde çağırıp değiştirebileceğiniz tüm varsayılan karakter animasyonlarını içerir. Idle'ın daha sık veya daha az sıklıkta oynatılacak iki varyasyonu olduğunu unutmayın.

Karakter EylemiAnimasyon Betiği 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üz

animateScript.swim.Swim.AnimationId

Yüz (Idle)

animateScript.swimidle.SwimIdle.AnimationId

TırmananimateScript.climb.ClimbAnim.AnimationId

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

  1. Varsayılan yürüyüş animasyon betiği 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ünden yürüyüş 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. Oyununuza özel yürüyüş animasyonunuzun varsayılan animasyonu geçersiz kıldığını doğrulamak için oyun testini yapın.

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

      Studio'nun mezzanine'inin test modları açılır menüsündeki Test seçeneği.
    2. Avatarınızla uzay istasyonunda dolaşın.

Animasyonları tetikle

Önceki teknik, bir karakterin belirli oyun içi eylemleri gerçekleştirdiğinde otomatik olarak oynatılan varsayılan animasyonları değiştirmeye odaklanırken, programatik olarak herhangi bir karakter eylemi yanıtında animasyonları tetikleyebilirsiniz. Örneğin, bir nesneyi almak veya bir tehlikeden hasar almak gibi.

Bu örnekte, oyuncular altın platforma dokunduklarında, varsayılan olmayan bir karakter dans animasyonunu tetiklerler.

Animasyonları oynatmanın bu yöntemi, oyunculara çevrelerindeki nesnelerle nasıl etkileşimde bulunmaları gerektiği konusunda anlık geri bildirim sağladığı için faydalıdır. Göstermek için, 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 duvarlara çok yakın yürümekten kaçınmayı ince bir şekilde öğretmenin bir yoludur.

Hacim ekle

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 çevrenin belirli alanlarıyla etkileşime girdiğini algılamaktır. Hacimleri betiklerle birleştirdiğinizde, çarpışma geri bildirimlerini kullanarak programatik olarak eylemleri tetikleyebilirsiniz; örneğin, oyuncunun sağlığını azaltmak veya bir animasyonu oynatmak gibi.

Bir malikanenin odasının uzaktan görünümü. Oyun olaylarını tetikleyen hacmi belirtmek için odanın ortasında bir kutunun dış hatları görünmektedir.
Duvall Drive'ın Gizemi, oyun olaylarını tetiklemek için hacimleri kullanarak odanın görsel görünümünü değiştirir.

Oyununuza bir hacim eklerken, yalnızca animasyonunuzu tetiklemek istediğiniz alanı kapsayacak ş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, oyuncular ilgi alanına veya nesneye ulaşmadan önce oynatılır ve ne yaptıklarını anlamayabilirler.

Bir buhar sızıntısının etrafında bir animasyonu tetikleyecek bir hacim eklemek için:

  1. Explorer penceresinde, yeni bir blok parça ekleyin.
  2. Bloğu konumlandırın ve boyutlandırın, böylece animasyonunuzu tetiklemek istediğiniz alanı kapsar.
  3. Properties penceresinde,
    1. Name'i AnimationDetector olarak ayarlayın.

    2. Bloğun görünmez olması için Transparency'yi 1 olarak ayarlayın.

      Bir buhar havalandırmasının etrafında bir kutunun dış hatları görünür, hacmin konumunu belirtmek için.

Betik oluştur

Artık animasyonunuzu tetiklemek için tanımlanmış bir bölgeniz olduğuna göre, oyuncuların hacimle çarpıştığında programatik olarak algılayan bir betik oluşturma zamanı. Çarpışma olaylarını dinleyerek, oyun gereksinimlerinize uygun herhangi bir animasyonu tetikleyebilirsiniz.

Örneğin, bu animasyon tekniği, oyuncuların hacimle çarpıştıklarında anında geri bildirim sağlaması için bir LocalScript kullanır. Eğer sunucu çarpışmayı dinleyip animasyonu oynatmaya çalışırsa, oyuncunun istemcisinde hacme dokunması ile animasyonun oynatılması arasında bir gecikme olabilir; çünkü sunucudan istemciye çoğaltma süresi vardır.

Yerel oyuncunun karakterinin hacme dokunduğunda algılayacak bir yerel betik oluşturmak için:

  1. Explorer penceresinde, StarterCharacterScripts'e yeni bir betik ekleyin. Bu yerleştirme, betiğin ve çocuklarının oyuncu karakterine katılmasını sağlar ve yeniden doğduklarında oyuna geri döner.

    1. StarterPlayer'ı genişletin, ardından StarterCharacterScripts çocuğunun üzerine 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 betikte, 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 betiği, 3D dünyada var olan tüm nesneleri içeren Workspace hizmetini alarak başlar. Bu, betiğin hacim olarak işlev gören Part nesnesini referans alması gerektiği için önemlidir.

Her oyuncu karakteri oyuna yüklendiğinde veya yeniden doğduğunda, betik şunları bekler:

  • Bir çocuk Animation nesnesi, bu nesneyi bir sonraki bölümde ekleyeceksiniz.
  • Karakterin Humanoid ve Animator nesneleri.
  • AnimationDetector adındaki hacim nesnesi.

Hacimle çarpıştığında, Touched olay işleyici fonksiyonu, çarpışan BasePart nesnesinin bir karakter modelinin alt öğesi olup olmadığını kontrol eder. Eğer öyleyse, fonksiyon daha sonra Model'in yerel oyuncunun karakteri olup olmadığını kontrol eder. Eğer öyleyse, fonksiyon:

  • Debounce'u true olarak ayarlar.
  • Animasyonu oynatır ve bitene kadar bekler.
  • Debounce'u false olarak ayarlar.

Debounce'u false'dan true'ya ve ardından animasyon bitince tekrar false'ya ayarlamak, oyuncuların hacimle sürekli çarpıştıklarında animasyonun tekrar tekrar tetiklenmesini önleyen bir debounce desenidir. Bu debounce deseni hakkında daha fazla bilgi için Çarpışmaları Algıla bölümüne bakın.

Animasyon ekle

Eğer şu anda oyununuzu test ederseniz, TriggerAnimation betiğiniz yerel oyuncu-hacim çarpışmasına yanıt olarak bir animasyonu oynatamaz. Bunun nedeni, bir animasyon varlık kimliği referans alması için beklemesidir ve o Animation nesnesi şu anda mevcut değildir.

Yerel betiğin hacimle çarpıştıklarında referans alması için 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'yi, oyuncular hacme dokunduğunda tetiklemek istediğiniz animasyon varlık kimliği ile ayarlayın. Örneğin, Tehlikeli Uzay İstasyonu örneği, bir karakterin geri düşme animasyonunu oynatmak için rbxassetid://3716468774 referans alır.

  3. Oyununuzu test edin ve oyuncular ilk buhar sızıntısına yaklaştıklarında animasyonun oynatıldığını doğrulayın.

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