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.
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.
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:
Explorer penceresinde, ServerScriptService'e yeni bir script ekleyin.
- ServerScriptService üzerine gelin ve ⊕ butonuna tıklayın.
- Bağlam menüsünden bir Script ekleyin.
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!")endlocal function onPlayerAdded(player)player.CharacterAdded:Connect(onCharacterAdded)endPlayers.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 Eylemi | Animasyon Script Referansı |
| Koş | animateScript.run.RunAnim.AnimationId |
| Yürü | animateScript.walk.WalkAnim.AnimationId |
| Zıpla | animateScript.jump.JumpAnim.AnimationId |
| Idle | animateScript.idle.Animation1.AnimationId |
| Düş | animateScript.fall.FallAnim.AnimationId |
| Yüz | animateScript.swim.Swim.AnimationId |
| Yüz (Idle) | animateScript.swimidle.SwimIdle.AnimationId |
| Tırman | animateScript.climb.ClimbAnim.AnimationId |
Varsayılan yürüme animasyon varlık kimliğini değiştirmek için:
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"endlocal function onPlayerAdded(player)player.CharacterAdded:Connect(onCharacterAdded)endPlayers.PlayerAdded:Connect(onPlayerAdded)Özel yürüme animasyonunuzun varsayılan animasyonu geçersiz kıldığından emin olmak için deneyiminizi test edin.
Aşağı açılır menüden Test seçeneğini seçin ve sağındaki Oynat butonuna tıklayın.

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.
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.

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:
- Explorer penceresinde, yeni bir blok parçası ekleyin.
- Bloğu yerleştirip boyutlandırın ve animasyonunuzu tetiklemek istediğiniz alanı kapsayacak şekilde ayarlayın.
- Properties penceresinde,
Ad'ı AnimationDetector olarak ayarlayın.
Bloğun görünmez olması için Şeffaflık'ı 1 olarak ayarlayın.

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:
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.
- StarterPlayer'ı genişletin, ardından StarterCharacterScripts alt çocuğuna gelin ve ⊕ butonuna tıklayın.
- Bağlam menüsünden bir LocalScript ekleyin ve adını TriggerAnimation olarak değiştirin.
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 = falseanimationDetector.Touched:Connect(function(hit)if debounce thenreturnendlocal hitCharacter = hit:FindFirstAncestorWhichIsA("Model")if hitCharacter ~= localCharacter thenreturnenddebounce = trueanimationTrack:Play()animationTrack.Ended:Wait()debounce = falseend)
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,
- Ç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:
Explorer penceresinde, TriggerAnimation'a yeni bir animasyon ekleyin.
- TriggerAnimation üzerine gelin ve ⊕ butonuna tıklayın.
- Bağlam menüsünden bir Animation ekleyin.
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.
Deneyiminizi test edin ve oyuncular ilk buhar sızıntısına yaklaştıklarında animasyonun oynatıldığından emin olun.