Memainkan animasi karakter

*Konten ini diterjemahkan menggunakan AI (Beta) dan mungkin mengandung kesalahan. Untuk melihat halaman ini dalam bahasa Inggris, klik di sini.

Memainkan animasi karakter adalah bagian penting dari apa yang membuat avatar dan karakter non-playable (NPC) ekspresif, realistis, dan menarik bagi audiens Anda. Selain memberikan visual yang imersif, animasi karakter memberikan umpan balik kepada pemain dari tindakan mereka, panduan tentang cara menavigasi lingkungan, dan informasi penting tentang karakter mereka dan lainnya.

Menggunakan file Hazardous Space Station .rbxl sebagai referensi, tutorial ini menunjukkan kepada Anda cara memainkan animasi karakter menggunakan dua teknik berbeda, termasuk panduan tentang:

  • Menukar ID aset animasi karakter default dengan animasi kustom Anda sendiri.
  • Memicu animasi sebagai respons terhadap tindakan karakter dalam ruang 3D.

Setelah Anda menyelesaikan tutorial ini, Anda akan memiliki keterampilan untuk menyesuaikan animasi untuk berbagai situasi permainan.

Mengubah animasi default

Setiap karakter dengan objek default Humanoid, baik itu avatar yang dikendalikan pemain atau karakter non-pemain (NPC), mencakup serangkaian animasi default yang diputar setiap kali karakter melakukan tindakan tertentu dalam permainan, seperti berlari, memanjat, dan melompat. Roblox menyediakan animasi ini secara langsung untuk setiap permainan tanpa usaha scripting tambahan.

Animasi Jatuh Default
Animasi Berenang Default
Animasi Memanjat Default

Namun, jika animasi default ini tidak memenuhi persyaratan desain untuk lingkungan, estetika, atau narasi keseluruhan dunia Anda, Anda dapat menukarnya dengan animasi kustom yang berlaku untuk setiap pemain yang bergabung dengan permainan Anda.

Untuk mendemonstrasikan, bagian berikut mengajarkan Anda cara menukar animasi berjalan default dengan animasi siklus berjalan kustom dari Buat Animasi Karakter. Menggunakan proses yang sama ini, Anda dapat menukar animasi default lainnya dengan ID aset animasi Anda sendiri.

Animasi Berjalan Default
Animasi Berjalan Kustom

Buat skrip

Setiap objek Humanoid karakter mencakup objek anak Animator yang menyimpan semua animasi default karakter. Untuk mengatur salah satu dari animasi default ini ke ID aset baru, Anda harus membuat skrip di ServerScriptService sehingga dapat merujuk dan menimpa nilai default objek Animator segera setelah pemain memuat ke dalam permainan.

Untuk membuat skrip yang akan merujuk ID aset animasi default:

  1. Di jendela Explorer, tambahkan skrip baru ke ServerScriptService.

    1. Arahkan mouse ke ServerScriptService dan klik tombol ⊕.
    2. Dari menu konteks, masukkan Skrip.
  2. Di skrip baru, tempelkan kode berikut:

    local Players = game:GetService("Players")
    local function onCharacterAdded(character)
    local humanoid = character:WaitForChild("Humanoid")
    local animator = humanoid:WaitForChild("Animator")
    print("Animator ditemukan!")
    end
    local function onPlayerAdded(player)
    player.CharacterAdded:Connect(onCharacterAdded)
    end
    Players.PlayerAdded:Connect(onPlayerAdded)

Skrip ResetDefaultAnimations dimulai dengan mendapatkan layanan Players, yang berisi semua objek Player untuk pemain saat mereka terhubung ke server. Ketika setiap karakter pemain dimuat ke dalam permainan, fungsi onCharacterAdded menunggu hingga mendeteksi objek Humanoid dan Animator karakter.

Ketika mendeteksi objek Animator untuk pertama kalinya, skrip kemudian mencetak "Animator ditemukan!" untuk memberi tahu Anda bahwa skrip berfungsi seperti yang diharapkan.

Ganti ID aset

Sekarang Anda tahu skrip Anda dapat mendeteksi ketika pemain memuat dan terhubung ke server, Anda dapat memodifikasi skrip Anda untuk secara khusus merujuk ID animasi yang ingin Anda tukar dengan animasi kustom Anda.

Tabel berikut berisi semua animasi karakter default yang dapat Anda panggil dan ganti dalam objek Animator. Perhatikan bahwa Idle memiliki dua variasi yang dapat Anda program untuk diputar lebih atau kurang sering.

Tindakan KarakterReferensi Skrip Animasi
BerlarianimateScript.run.RunAnim.AnimationId
BerjalananimateScript.walk.WalkAnim.AnimationId
MelompatanimateScript.jump.JumpAnim.AnimationId
Idle

animateScript.idle.Animation1.AnimationId
animateScript.idle.Animation2.AnimationId

JatuhanimateScript.fall.FallAnim.AnimationId
Berenang

animateScript.swim.Swim.AnimationId

Berenang (Idle)

animateScript.swimidle.SwimIdle.AnimationId

MemanjatanimateScript.climb.ClimbAnim.AnimationId

Untuk mengganti ID aset animasi berjalan default:

  1. Panggil referensi skrip animasi berjalan default, lalu ganti ID aset dengan ID aset animasi kustom Anda sendiri. Misalnya, cuplikan kode berikut merujuk pada animasi siklus berjalan dari Buat Animasi Karakter.

    local Players = game:GetService("Players")
    local function onCharacterAdded(character)
    local humanoid = character:WaitForChild("Humanoid")
    local animator = humanoid:WaitForChild("Animator")
    print("Animator ditemukan!")
    local animateScript = character:WaitForChild("Animate")
    animateScript.walk.WalkAnim.AnimationId = "rbxassetid://122652394532816"
    end
    local function onPlayerAdded(player)
    player.CharacterAdded:Connect(onCharacterAdded)
    end
    Players.PlayerAdded:Connect(onPlayerAdded)
  2. Uji permainan Anda untuk memastikan animasi berjalan kustom Anda menggantikan animasi default.

    1. Pilih Uji dari menu dropdown dan klik tombol Mainkan di sebelah kanan untuk memulai pengujian.

      Opsi Uji dalam menu pengujian dropdown dari mezzanine Studio.
    2. Berjalan di sekitar stasiun luar angkasa dengan avatar Anda.

Memicu animasi

Sementara teknik sebelumnya berfokus pada menukar animasi default yang secara otomatis diputar setiap kali karakter melakukan tindakan tertentu dalam permainan, Anda dapat memicu animasi secara programatis untuk diputar sebagai respons terhadap tindakan karakter dalam ruang 3D, seperti mengambil item atau menerima kerusakan dari bahaya.

Dalam contoh ini, ketika pemain menyentuh platform emas, mereka memicu animasi tarian karakter non-default.

Metode memainkan animasi ini berguna karena memberikan umpan balik instan kepada pemain tentang bagaimana mereka harus berinteraksi dengan objek di lingkungan mereka. Untuk mendemonstrasikan, bagian berikut menunjukkan kepada Anda cara memicu animasi setiap kali karakter terlalu dekat dengan kebocoran uap berbahaya sebagai cara untuk secara halus mengajarkan pemain untuk menghindari berjalan terlalu dekat dengan dinding.

Sisipkan volume

Salah satu cara paling umum untuk memicu perilaku permainan yang unik adalah dengan menggunakan volume, atau wilayah tak terlihat dalam ruang 3D, untuk mendeteksi ketika karakter atau objek berinteraksi dengan area tertentu dari lingkungan. Ketika Anda menggabungkan volume dengan skrip, Anda dapat menggunakan umpan balik tabrakan mereka untuk secara programatis memicu tindakan, seperti mengurangi kesehatan pemain atau memainkan animasi.

Pemandangan jauh dari sebuah ruangan mansion. Sebuah garis besar kotak terlihat di tengah ruangan untuk menandakan volume yang memicu peristiwa permainan.
The Mystery of Duvall Drive menggunakan volume untuk memicu peristiwa permainan yang mengubah penampilan visual ruangan.

Saat menambahkan volume ke permainan Anda, penting untuk mengatur skala sehingga hanya mencakup ruang yang ingin Anda gunakan untuk memicu animasi Anda. Jika Anda membuat volume Anda terlalu kecil, pemain mungkin tidak pernah bertabrakan dengan area untuk memainkan animasi; sebaliknya, jika Anda membuat volume Anda terlalu besar, animasi akan diputar sebelum pemain mencapai item atau area yang menarik, dan mereka mungkin tidak memahami apa yang mereka lakukan untuk memicu animasi.

Untuk menyisipkan volume di sekitar kebocoran uap yang akan memicu animasi:

  1. Di jendela Explorer, tambahkan bagian blok baru.
  2. Posisi dan ubah ukuran blok hingga menutupi area yang ingin Anda gunakan untuk memicu animasi Anda.
  3. Di jendela Properties,
    1. Atur Nama menjadi AnimationDetector.

    2. Atur Transparansi menjadi 1 untuk membuat blok tak terlihat.

      Garis besar blok terlihat di sekitar ventilasi uap untuk menandakan posisi volume.

Buat skrip

Sekarang Anda memiliki wilayah yang ditentukan untuk memicu animasi Anda, saatnya untuk membuat skrip yang secara programatis mendeteksi kapan pemain bertabrakan dengan volume. Anda kemudian dapat mendengarkan peristiwa tabrakan untuk memicu animasi apa pun yang masuk akal untuk kebutuhan permainan Anda.

Misalnya, teknik animasi ini menggunakan LocalScript alih-alih Script untuk memberikan umpan balik langsung kepada pemain ketika mereka bertabrakan dengan volume. Jika server mendengarkan tabrakan dan memainkan animasi, mungkin ada penundaan antara pemain menyentuh volume di klien mereka dan melihat animasi diputar karena waktu replikasi dari server ke klien.

Untuk membuat skrip lokal yang akan mendeteksi ketika karakter pemain lokal menyentuh volume:

  1. Di jendela Explorer, tambahkan skrip baru ke StarterCharacterScripts. Penempatan ini memastikan skrip dan anak-anaknya disalin ke karakter pemain saat bergabung dan ketika mereka respawn kembali ke dalam permainan.

    1. Perluas StarterPlayer, lalu arahkan mouse ke anak StarterCharacterScripts dan klik tombol ⊕.
    2. Dari menu konteks, masukkan LocalScript dan ganti namanya menjadi TriggerAnimation.
  2. Di skrip baru, tempelkan kode berikut:

    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)

Skrip TriggerAnimation dimulai dengan mendapatkan layanan Workspace, yang berisi semua objek yang ada di dunia 3D. Ini penting karena skrip perlu merujuk objek Part yang bertindak sebagai volume Anda.

Untuk setiap karakter pemain yang dimuat atau respawn kembali ke dalam permainan, skrip menunggu:

  • Objek anak Animation yang akan Anda tambahkan di bagian berikutnya.
  • Objek Humanoid dan Animator karakter.
  • Objek volume di workspace yang bernama AnimationDetector.

Ketika sesuatu bertabrakan dengan volume, fungsi penangan peristiwa Touched mendapatkan nenek moyang pertama yang merupakan Model, yang seharusnya adalah karakter jika BasePart yang bertabrakan dengan volume adalah keturunan dari model karakter. Jika iya, fungsi kemudian memeriksa apakah Model adalah karakter pemain lokal. Jika iya, fungsi kemudian:

  • Mengatur debounce menjadi true.
  • Memainkan dan menunggu animasi hingga selesai.
  • Mengatur debounce kembali menjadi false.

Mengatur debounce dari false ke true dan kembali ke false setelah animasi selesai diputar adalah pola debounce yang mencegah animasi dipicu berulang kali saat pemain terus-menerus bertabrakan dengan volume. Untuk informasi lebih lanjut tentang pola debounce ini, lihat Deteksi tabrakan.

Tambahkan animasi

Jika Anda menguji permainan Anda sekarang, skrip TriggerAnimation Anda masih tidak akan dapat memutar animasi sebagai respons terhadap tabrakan pemain-lokal dengan volume. Ini karena skrip menunggu objek anak Animation dengan ID aset animasi yang dapat dirujuk, dan objek Animation tersebut saat ini tidak ada.

Untuk menambahkan animasi agar skrip lokal dapat merujuk saat pemain bertabrakan dengan volume:

  1. Di jendela Explorer, tambahkan animasi baru ke TriggerAnimation.

    1. Arahkan mouse ke TriggerAnimation dan klik tombol ⊕.
    2. Dari menu konteks, masukkan Animasi.
  2. Pilih objek animasi baru, lalu di jendela Properties, atur AnimationID ke ID aset animasi yang ingin Anda picu ketika pemain menyentuh volume. Misalnya, contoh Hazardous Space Station merujuk pada rbxassetid://3716468774 untuk memainkan animasi karakter yang jatuh ke belakang.

  3. Uji permainan Anda untuk memastikan animasi Anda diputar ketika pemain berada dekat kebocoran uap pertama.

©2026 Roblox Corporation. Roblox, logo Roblox, dan Powering Imagination termasuk dalam merek dagang kami yang terdaftar dan tidak terdaftar di AS dan negara lainnya.