Karakter animasyonları oynamak bir avatar ve oynanabilir karakterleri (NPC) ifadelerini, gerçekçi ve etkileyici hale getiren önemli bir kısmıdır. Görsel efektleri sağlamak yanı sıra, karakter animasyonları oyuncuların eylemlerinden geri bildirim sağlar, çevreyle nasıl gezileceği hakkında rehberlik verir ve karakterleri ve diğer
Tehlikeli Uzay İstasyonu.rbxl dosyasını referans olarak kullanarak, bu öğretici iki farklı teknik kullanarak karakter animasyonlarını nasıl oynayacağınızı gösterir:
- Kendi özel animasyonlarınızla varsayılan karakter animasyonu öğelerini değiştirmeniz.
- 3D alanındaki karakter eylemlerine yanıt olarak animasyon tetiklenmesi.
Bu öğreticiyi tamamladıktan sonra, çeşitli oyun durumları için animasyonları özelleştirme yeteneğine sahip olacaksınız.
Varsayılan Animasyonları Değiştirme
Her karakterin varsayılan bir Humanoid nesne ile, oyuncu kontrolü bir avatar veya NPC olmasının başka bir yan etkisi olsa bile, bir dizi varsayılan animasyonlar oynar, herhangi bir deneyim işlemi yaptığında karakterin yapması gereken özel eylemleri yerine
Ancak, bu varsayılan animasyonlar dünyanızın çevresi, tasarım gereksinimleri veya genel hikayesi için tasarım gereksinimlerini karşılamıyorsa, onları özelleştirilmiş animasyonlarla değiştirebilirsiniz. Bu oyun tasarım tekniği, karakterlerinizin ve deneyimlerinizin daha kişisel, etkileşimli ve gerçekçi hissetmesine yardımcı olabilir.
Göstermek için, aşağıdaki bölüm öğretici olarak gösterir Karakter Animasyonları Oluşturma . Bu süreçte kullanılan özel bir yürüyüş animasyonu animasyonunu değiştirmeyi öğretir. Aynı süreç kullanılarak, varsayılan animasyonlardan herhangi birini kendi animasyon kaynaklarınızla değiştirebilirsiniz.
Script Oluştur
Her karakterin Humanoid nesnesi, karakterin varsayılan animasyonlarının tümünü depolayan bir çocuk Animator nesnesi içerir. Tüm bu varsayılan animasyonları yeni varsayılan animasyonlar için yeni oluşt
Varsayılan animasyon kaynaklarına referans verecek bir senaryo oluşturmak için:
In the Explorer window, add a new script to ServerScriptService .
- Hover over ServerScriptService and click the ⊕ button.
- Konteks menüsünden bir Script ekle.
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!")local function onPlayerAdded(player)player.CharacterAdded:Connect(onCharacterAdded)endPlayers.PlayerAdded:Connect(onPlayerAdded)
Class.Players kullanıcısı, oyuncuların sunucuya bağlandığında tüm Players nesnelerini içeren hizmet alır. Oyuncunun her karakterinin deneyime yüklediğinde,
Class.Animator nızı ilk kez algıladığında, script sonra "Animator bulundu!" diyor, böylece script'in niyetinde çalıştığınızı biliyorsunuz.
AssetID'yi Değiştir
Artık oyuncuların sunucuya yüklediğini ve bağlandığını bildiğinizden, oyununuzu özelleştirilmiş animasyonlarınızla değiştirmeyi özelleştirebilirsiniz.
Aşağıdaki tabloda, Animator nesneyi içinde çağırıp değiştirebileceğiniz tüm varsayılan karakter animasyonları bulunur. Idle'nin, daha sık veya daha az sık oynanmasını programlayabileceğiniz iki çeşit vardır.
Karakter Eylemi | Animasyon Kodu İşaretçisi |
Koş | animateScript.run.RunAnim.AnimationId |
Yürüyüşe gitmek | animateScript.walk.WalkAnim.AnimationId |
Zıplama | animateScript.jump.JumpAnim.AnimationId |
Boşlukta Gezinmeyi Etkinleştirmeyi Değiştirmeyiniz. | animateScript.idle.Animation1.AnimationId``animateScript.idle.Animation2.AnimationId |
Sonbahar | animateScript.fall.FallAnim.AnimationId |
Yüzme | animateScript.swim.Swim.AnimationId |
Yüzme (Boş) | animateScript.swimidle.SwimIdle.AnimationId |
Tırmanma | animateScript.climb.ClimbAnim.AnimationId |
Varsayılan yürüyüş animasyonu kaynağını değiştirmek için:
Varsayılan yürüyüş animasyonu kaynağını aradıktan sonra, varsayılan yürüyüş animasyonu kaynağını kendi özel animasyon kaynağınızla değiştirin. Örneğin, aşağıdaki kod örneği Karakter Animasyonları Oluşturma 'den yürüyüş döngü animasyonunu referans eder.
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"local function onPlayerAdded(player)player.CharacterAdded:Connect(onCharacterAdded)endPlayers.PlayerAdded:Connect(onPlayerAdded)Özelleştirilmiş yürüme animasyonunuzun varsayılan animasyonu üstünde çalıştığından emin olmak için deneyinizi oynatın.
Menü çubuğunda Oyna düğmesine tıklayın. Studio oyun testi moduna girer.
Avatarınızla uzay istasyonunun avatardolaşın.
Etkinleştirme Animasyonları
Önceki teknik, bir karakterin belirli deneyim eylemlerini yerine getirdiğinde oynatılan varsayılan animasyonları değiştirmeye odaklanırken, animasyonları yanıt olarak herhangi bir karakter eylemi içinde 3D alanındaki herhangi bir eyleme yapabilirsiniz, bir öğeyi almak veya bir tehlike almak gibi.
Bu animasyon oynama yöntemi yararlıdır, çünkü oyuncular çevrelerindeki nesnelerle nasıl etkileşime geçeceği konusunda anında geri bildirim sağlar. Göstermek için, aşağıdaki bölüm oyuncuların tehlikeli gaz sızdırmalarına karşı nasıl sakin bir şekilde yürüyeceğini gösterir.
Sahiplenmeyi Başlat
Eşsiz bir oyun davranışı davranışını etkinleştirmek için en yaygın yollarından biri, sesleri veya 3D alanındaki görünmez bölgeleri kullanmak, karakterlerin veya oyuncuçevre ile etkileşim kurduğunda tespit etmek için onları programatik olarak tetiklemek, bunun gibi sağlık azaltma veya animasyon
Deneyiminize bir ses eklerken, onu deneyinizin içine yaymak önemlidir, böylece animasyonu sadece etkinleştirmeniz gereken alanı kapsar. Eğer sesinizi çok küçük yaparsanız, oyuncular animasyonu oynatmak için alanınıza ulaşmayabilir; aksine, sesinizi çok büyük yaparsanız, animasyonu etkinle
Bir animasyonu tetikleyecek bir buharlaşma etrafında bir hacim girilir:
- In the Explorer window, add a new block part.
- animasyonbaşlatmak için istediğiniz alanı kapsayana kadar bloklarınızı konumlandırın ve yeniden boyutlandırın.
- Özellikler penceresinde,
Set İsimi to AnimasyonDetektörü .
Görünmez hale getirmek için Saydamlığı 1 değerine ayarla.
Script Oluştur
Animasyonunuzu başlatmak için belirli bir bölgeye sahip olduğunuzdan sonra, artık oyuncuların sesle çarpıştığında programatik olarak algılanan bir senaryo oluşturmaya hazırız. Ardından, oyununuz için mantıklı olan herhangi bir animasyonu oluşturmak için kollision etkinleştirici etkinleştirici etkinleştirici etkinleştirici etkinleştirici etkinleştirici etkinleştirici etkin
Örneğin, bu animasyon tekniği bir LocalScript kullanır, bir Script yerine, oyunculara hızla geri bildirim sağlamak için kollarda çarpıştığında anında geri bildirim sağlamak için kullanılır. Eğer sunucu kollarda çarpıştığında ve animasy
Yerel oyuncunun karakterinin sesi ile etkileşime geçtiğinde tespit edileceği yerel bir senaryo oluşturmak için:
In the Explorer window, add a new script to StartercharacterScripts . This placement ensures the script and its children clone into the player character on join and when they respawn back into the experience.
- Expand BaşlangıçOyunuPlayer , then hover over its StarterCharacterScripts child and click the ⊕ button.
- Konteks menüsünden bir Yerel Kod girin ve ismini TriggerAnimation 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)
Class.Workspace hizmetini alarak çalışmaya başlıyor, bu da 3D dünyasındaki tüm nesneleri içerir. Bu önemlidir, çünkü script sizin sesiniz olarak davranan Workspace nesnine işaret etmelidir.
Oyuncu karakteri deneyime yeniden yüklenmesi veya yeniden doğması için, kod bekler:
- Bir sonraki bölümde ekleyeceğiniz çocuk Animation objesi.
- İşlemci Adını Verilen İşlemci AnimateDetector .
Ses ile herhangi bir şey çarpıştığında, Touched etkinleştirici fonksiyonu, ses ile ilgili ilk atalet olarak Model olmalıdır, bu da karakterin ifadesi olmalıdır. E
- Debounce'ı true olarak ayarlar.
- Animasyonun bitirbeklemez.
- Debounce'u false 'e geri ayarlar.
Animasyonun oynatılmasının ardından false``true``false 2>free2> 5>5> ile tekrar etkinleştirilmesi için debounce patTERNİNİ, bu debounce patTERNİNİn oynatılmasının ardından 8>188> false1> ile tekrar etkinleşt
Animasyon Ekle
Şimdi deneyiminizi oynatırsanız, TriggerAnimation script'iniz yine de yerel oyuncu hacmi çarpışmasına yanıt olarak bir animasyon oynayamayacak. Bu, yerel bir çocuk Class.Animation script'iyle bir animasyon öğesi referansı için bekliyor, ve bu Class.Animation script'i mevcut değil
Oyuncuların sesle etkileşime geçtiğinde referans olarak yerel kod animasyonu eklemek için:
In the Explorer window, add a new animation to TriggerAnimation .
- Hover over TriggerAnimation and click the ⊕ button.
- Konteks menüsünden bir Animasyon girin.
Yeni animasyon nesini seçin, sonra Özellikler penceresinde, AnimationID animasyon kaynağını ayarlayın istediğinizde oyuncular dokununca etkileşim kurmak için kullanılır. Örneğin, Tehlikeli Uzay İstasyonu örneği, 2> rbxassetid://
Animasyonun oyuncular ilk ısıtık yakın olduğunda oynanmasını garanti etmek için deneyin.