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.
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.
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:
Explorer penceresinde, ServerScriptService'e yeni bir betik ekleyin.
- ServerScriptService üzerine gelin ve ⊕ butonuna tıklayın.
- Bağlam menüsünden bir Script ekleyin.
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!")endlocal function onPlayerAdded(player)player.CharacterAdded:Connect(onCharacterAdded)endPlayers.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 Eylemi | Animasyon Betiği 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üyüş animasyonu varlık kimliğini değiştirmek için:
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"endlocal function onPlayerAdded(player)player.CharacterAdded:Connect(onCharacterAdded)endPlayers.PlayerAdded:Connect(onPlayerAdded)Oyununuza özel yürüyüş animasyonunuzun varsayılan animasyonu geçersiz kıldığını doğrulamak için oyun testini yapın.
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.

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

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:
- Explorer penceresinde, yeni bir blok parça ekleyin.
- Bloğu konumlandırın ve boyutlandırın, böylece animasyonunuzu tetiklemek istediğiniz alanı kapsar.
- Properties penceresinde,
Name'i AnimationDetector olarak ayarlayın.
Bloğun görünmez olması için Transparency'yi 1 olarak ayarlayın.

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