Karakter animasyonları oynatmak avatarları ve oynanamayan karakterleri (NPC'ler) ifade edici, gerçekçi ve izleyicilerinize çekici hale getiren önemli bir parçasıdır.Sürükleyici görüntüler sağlamanın yanı sıra, karakter animasyonları oyunculara eylemlerinden geri bildirim, çevreyi nasıl gezineceklerine dair rehberlik ve karakterleri ve diğerleri hakkında hayati bilgiler sağlar.
Tehlikeli Uzay İstasyonu dosyasını bir referans olarak kullanarak, bu eğitim size iki farklı teknik, yönlendirme dahil karakter animasyonları nasıl oynayacağınızı gösterir:
- Kendi özel animasyonlarınızla varsayılan karakter animasyonu özniteliklerini değiştirme.
- 3B uzayındaki karakter eylemlerine yanıt olarak animasyonları tetiklemek.
Bu eğitimi tamamladıktan sonra, çok çeşitli oyun durumları için animasyonları özelleştirecek becerilere sahip olacaksınız.
Varsayılan animasyonları değiştir
Varsayılan bir Humanoid nesneye sahip her karakter, oyuncunun kontrol ettiği bir avatar veya oyuncu olmayan bir karakter (NPC) olsa, karakter belirli deneyim eylemlerini gerçekleştirdiğinde çalan bir dizi varsayılan animasyon içerir, örneğin koşmak, tırmanmak ve atlamak gibi.Roblox, bu animasyonları herhangi bir ek kodlama çabası olmadan her deneyim için kutudan dışarı verir.
Ancak, bu varsayılan animasyonlar dünyanızın çevresi, estetiği veya genel hikayesi için tasarım gereksinimlerini karşılamıyorsa, deneyiminize katılan her oyuncuya özel animasyonlarla değiştirebilirsiniz.Bu oyun tasarım tekniği, karakterlerinizin ve deneyimlerinizin daha kişisel, etkileyici ve sürükleyici hissetmesine yardımcı olabilir.
Göstermek için, aşağıdaki bölüm size varsayılan yürüme animasyonunu özel bir yürüme döngüsü animasyonuyla nasıl değiştireceğinizi öğretir Karakter Animasyonları Oluştur .Aynı süreci kullanarak, varsayılan animasyonlardan herhangi birini kendi animasyon varlıklarınızla değiştirebilirsiniz.
Senaryo 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 deneye yüklendiğinde referans olabilmesi ve varsayılan değerleri geçersiz kılabilmesi için bir senaryo oluşturmalısınız, böylece oyuncular deneye yüklendiğinde varsayılan değerleri referans alabilir ve geçersiz kılabilir.
Varsayılan animasyon özniteliklerini referans alacak bir senaryo oluşturmak için:
Gezgini penceresinde, ServerScriptService 'e yeni bir senaryo ekleyin.
- Sunucu Kript Hizmeti üzerine gelin ve ⊕ düğmesine tıklayın.
- Kontekst menüsünden, bir Kript ekleyin.
Yeni senaryoda, 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 found!")endlocal function onPlayerAdded(player)player.CharacterAdded:Connect(onCharacterAdded)endPlayers.PlayerAdded:Connect(onPlayerAdded)
The ResetDefaultAnimations script, bir oyuncu bir sunucuya bağlandığında tüm Players nesneleri içeren Player hizmetini alarak başlar.Oyuncunun karakterlerinin her biri deneyime yüklendiğinde, onCharacterAdded fonksiyonu karakterin Humanoid ve Animator nesnelerini algılayana kadar bekler.
İlk kez bir Animator nesnesi tespit ettiğinde, senaryo ardından "Animatör bulundu!" yazdırarak senaryonun hedeflendiği gibi çalıştığını bildirir.
assetID'yi değiştirin
Artık senaryonuzun oyuncuların sunucuya yüklendiğini ve bağlandığını tespit edebildiğini bildiğinize göre, kendi özel özel animasyonlarınızla değiştirmek istediğiniz animasyon ID'lerini özellikle referans olarak 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.Boşluk'un daha az veya daha sık oynamak için programlayabileceğiniz iki değişikliği olduğunu unutmayın.
Karakter Eylemi | Animasyon Kılavuzu Referansı |
Koş | animateScript.run.RunAnim.AnimationId |
Yürümek | animateScript.walk.WalkAnim.AnimationId |
Zıplama | animateScript.jump.JumpAnim.AnimationId |
Boş | animateScript.idle.Animation1.AnimationId``animateScript.idle.Animation2.AnimationId |
Düşme | animateScript.fall.FallAnim.AnimationId |
Yüzün | animateScript.swim.Swim.AnimationId |
Yüzme (Boşluk) | animateScript.swimidle.SwimIdle.AnimationId |
Tırmanma | animateScript.climb.ClimbAnim.AnimationId |
Varsayılan yürüme animasyonu assetID'sini değiştirmek için:
Varsayılan yürüme animasyon kılavuzunu çağırın, ardından varlıkID'yi kendi özel animasyon varlığınızla değiştirin.Örneğin, aşağıdaki kod örneği Karakter Animasyonları Oluştur 'dan yürüme döngüsü animasyonuna referans verir.
local Players = game:GetService("Players")local function onCharacterAdded(character)local humanoid = character:WaitForChild("Humanoid")local animator = humanoid:WaitForChild("Animator")print("Animator found!")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çmesini sağlamak için deneyiminizi test edin.
Araç çubuğunda, Oyna düğmesine tıklayın. Studio oyun testi moduna girer.
Avatarınızla uzay istasyonunun etrafında dolaşın.
Animasyonları tetikle
Önceki teknik, herhangi bir karakterin belirli deneyim eylemleri yaptığında otomatik olarak oynayan varsayılan animasyonları değiştirmeye odaklanırken, 3B uzayındaki herhangi bir karakterin eylemine yanıt olarak animasyonları programatik olarak tetikleyebilirsiniz, örneğin bir eşya almak veya bir tehlikeden zarar görmek.
Animasyon oynatma yöntemi bu, çünkü oyunculara çevrelerindeki nesnelerle nasıl etkileşim kurmaları gerektiğine dair anlık geri bildirim sağlar.Göstermek için, aşağıdaki bölüm, karakterler tehlikeli buhar sızıntılarına çok yakın olduklarında nasıl bir animasyon tetikleyeceğinizi gösterir, böylece oyuncular duvarlara çok yakın gitmekten kaçınmayı öğrenir.
Ses ekleyin
Eşsiz oyun davranışını tetiklemek için en yaygın yolların biri, karakterlerin veya nesnelerin çevredeki belirli alanlarla etkileşime girdiğini tespit etmek için hacimleri veya 3B uzaydaki görünmez bölgeleri kullanmaktır.Hacimleri senaryolarla eşleştirdiğinizde, oyuncunun sağlığını azaltmak veya bir animasyon oynamak gibi eylemleri otomatik olarak tetiklemek için çarpışma geri bildirimini kullanabilirsiniz.

Deneyiminize bir ses eklerken, animasyonu tetiklemek istediğiniz alanı kapsayacak şekilde ölçeklendirmek önemlidir.Sesinizi çok küçük yaparsanız, oyuncular animasyonu oynamak için bölgeyle asla çarpışmayabilir; aksine, sesinizi çok büyük yaparsanız, animasyon oyuncular bir öğeye veya ilgi alanına ulaşana kadar oynayacak ve animasyonu tetiklemek için ne yaptıklarını anlayamayabilirler.
Bir animasyonu tetikleyecek bir buhar sızıntısının etrafına bir hacim eklemek için:
- Kâşif penceresinde, yeni bir blok parçası ekleyin.
- Animasyonu tetiklemek istediğiniz alanı kapsayana kadar blokun konumunu ve boyutunu değiştirin.
- Özellikler penceresinde,
İsmi AnimasyonDetektörü 'ye ayarlayın.
Blokun görünmez olması için Saydamlık seviyesine ayarlayın.
Senaryo oluştur
Animasyonunuzu tetiklemek için tanımlanmış bir bölgeye sahip olduğunuza göre, oyuncuların herhangi bir zamanda ses ile çarpıştığını programatik olarak algılayan bir senaryo oluşturma zamanı geldi.Ardından oyun ihtiyaçlarınız için mantıklı herhangi bir animasyon tetiklemek için çarpışma olaylarını dinleyebilirsiniz.
Örneğin, bu animasyon tekniği, oyuncuların ses ile çarpıştığında anlık geri bildirim sağlamak için bir LocalScript yerine Script kullanır.Sunucu çarpışmayı dinler ve animasyonu oynarsa, oyuncunun klibine dokunması ve animasyonun oynanmasının ardından sunucudan klibe yapılan yeniden yazma süresi nedeniyle bir gecikme olabilir.
Yerel oyuncunun karakteri seslendiğinde tespit edecek yerel bir senaryo oluşturmak için:
Gezgini penceresinde, yeni bir senaryo ekleyin Başlangıç Karakterleri Senaryolarına .Bu yerleştirme, senaryo ve yavrularının oyuncu karakterine katılmasını sağlar ve deneye geri döndüklerinde.
- Genişlet Başlangıç Oyuncusu , ardından çocuğunun Başlangıç Karakter Senaryoları üzerine gezin ve ⊕ düğmesine tıkla.
- Kontekst menüsünden, bir YerelScript ekleyin ve adını TetiklemeAnimasyonu olarak değiştirin.
Yeni senaryoda, 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)
The TriggerAnimation kript yazılımı, 3B dünyada var olan tüm nesneleri içeren Workspace hizmeti alarak başlar.Bu önemlidir çünkü senaryo, hacminiz olarak hareket eden Part nesneye referans vermelidir.
Deneyime geri yüklenen veya yeniden doğan her oyuncu karakteri için, senaryo şunu bekler:
- Onun çocuğu Animation nesnesi, bir sonraki bölüme ekleyeceğiniz nesne.
- AnimasyonDetektörü adlı çalışma alanındaki ses nesnesi.
Herhangi bir şey ses ile çakıştığında, Touched etkinlik işleyici işlevi, ses ile çakışan Model karakterin ilk atasını alır, ki bu karakter modelünden bir çocuk olan karakter olmalıdır, eğer ses ile çakışan BasePart karakter bir karakter modelinin bir soyundur.Eğer öyleyse, işlev daha sonra ın yerel oyuncunun karakteri olup olmadığını kontrol eder.Eğer öyleyse, işlev sonra:
- Debounce'u true 'ye ayarlar.
- Animasyonun bitmesini bekler ve oynar.
- Debounce'u false 'ye geri ayarlar.
Animasyon oynatıldıktan sonra animasyonun tekrar tekrar tetiklenmesini engelleyen false debounce ayarından true``false animasyon bitince tekrar oynatmak, animasyonun oyuncuların sürekli olarak ses seviyesine çarptığında tekrar tetiklenmesini engelleyen bir debounce modelidir.Bu gecikme modeli hakkında daha fazla bilgi için, çarpışmaları algıla bakın.
Animasyon ekleyin
Deneyiminizi hemen şimdi test etseniz, TriggerAnimation kodunuz yerel oyuncu-volüm çarpışmasına yanıt olarak bir animasyon oynatamayacaktır.Bunun nedeni, bir animasyon özniteliği ile beklediği bir çocuk Animation nesnesi ve bu nesne şu anda mevcut değil, çünkü Animation nesne.
Yerel senaryo için bir animasyon eklemek ve oyuncuların ses ile çarpışmasıyla referans olmak için:
Gezgin penceresinde, yeni bir animasyon ekleyin TetiklemeAnimasyonu 'ya.
- Tetikleme Animasyonu üzerine gelin ve ⊕ düğmesine tıklayın.
- Kontekst menüsünden, bir Animasyon ekleyin.
Yeni animasyon nesnesini seçin, ardından Özellikler penceresinde, oyuncular hacme dokunduğunda tetiklemek istediğiniz animasyon varlığına AnimasyonID ayarlayın.Örneğin, Tehlikeli Uzay İstasyonu örnek referansları rbxassetid://3716468774 oynar.
Oyuncular ilk buhar sızıntısının yakınında olduklarında animasyonunuzun çalışmasını sağlamak için deneyiminizi test edin.