Karakter Animasyonlarını Oynama

*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ı 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

Varsayılan Sonbahar Animasyonu
Varsayılan Yüz Animasyonu
Varsayılan Tırmanma Animasyonu

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.

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

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:

  1. In the Explorer window, add a new script to ServerScriptService .

    1. Hover over ServerScriptService and click the ⊕ button.
    2. Konteks menüsünden bir Script ekle.
  2. 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)
    end
    Players.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 EylemiAnimasyon 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:

  1. 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)
    end
    Players.PlayerAdded:Connect(onPlayerAdded)
  2. Özelleştirilmiş yürüme animasyonunuzun varsayılan animasyonu üstünde çalıştığından emin olmak için deneyinizi oynatın.

    1. Menü çubuğunda Oyna düğmesine tıklayın. Studio oyun testi moduna girer.

      A Studio view of the Home tab with the Play button highlighted.
    2. 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 örnekte, oyuncular altın platforma dokununca, bir özel olmayan karakterin dans animasyonunu başlatır.

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

A far out view of a mansion room. An outline of a box is in the middle of the room to signify the volume that triggers gameplay events.
Duvall Drive'ın Gizemi, odanın görünümünü değiştiren oyun olaylarını tetiklemek için sesleri kullanır.

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:

  1. In the Explorer window, add a new block part.
  2. animasyonbaşlatmak için istediğiniz alanı kapsayana kadar bloklarınızı konumlandırın ve yeniden boyutlandırın.
  3. Özellikler penceresinde,
    1. Set İsimi to AnimasyonDetektörü .

    2. Görünmez hale getirmek için Saydamlığı 1 değerine ayarla.

      An outline of a block is visible around a steam vent to signify the position of the volume.

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:

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

    1. Expand BaşlangıçOyunuPlayer , then hover over its StarterCharacterScripts child and click the ⊕ button.
    2. Konteks menüsünden bir Yerel Kod girin ve ismini TriggerAnimation olarak değiştirin.
  2. 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 = 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)

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.
  • Karakterin Humanoid ve Animator nesneleri.
  • İş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:

  1. In the Explorer window, add a new animation to TriggerAnimation .

    1. Hover over TriggerAnimation and click the ⊕ button.
    2. Konteks menüsünden bir Animasyon girin.
  2. 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://

  3. Animasyonun oyuncular ilk ısıtık yakın olduğunda oynanmasını garanti etmek için deneyin.