Mainkan 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 tidak dapat dimainkan (NPC) ekspresif, realistis, dan menarik bagi audiens Anda.Selain menyediakan visual imersif, animasi karakter memberikan umpan balik pemain dari tindakan mereka, panduan tentang cara menavigasi lingkungan, dan informasi penting tentang karakter mereka dan orang lain.

Menggunakan file Stasiun Luar Angkasa Berbahaya.rbxl sebagai referensi, tutorial ini menunjukkan cara bermain animasi karakter menggunakan dua teknik berbeda, termasuk panduan tentang:

  • Mengganti aset animasi karakter default dengan animasi khusus Anda sendiri.
  • Memicu animasi dalam menanggapi tindakan karakter dalam ruang 3D.

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

Ubah animasi default

Setiap karakter dengan objek default Humanoid , apakah itu avatar yang dikontrol pemain atau karakter non-pemain (NPC), termasuk serangkaian animasi default yang diputar setiap kali karakter melakukan tindakan khusus dalam pengalaman, seperti berlari, menaiki, dan melompat.Roblox menyediakan animasi ini out-of-the-box untuk setiap pengalaman tanpa usaha pemrograman tambahan.

Animasi Jatuh Standar
>

Animasi Renang Dasar
>

Animasi Pendakian Dasar
>

Namun, jika animasi default ini tidak memenuhi persyaratan desain untuk lingkungan, estetika, atau narasi keseluruhan dunia Anda, Anda dapat menukarnya dengan animasi khusus yang berlaku untuk setiap pemain yang bergabung dengan pengalaman Anda.Teknik desain permainan ini dapat membantu karakter dan pengalaman Anda terasa lebih pribadi, menarik, dan imersif.

Untuk menunjukkan, bagian berikut mengajarkan Anda cara bertukar animasi berjalan default dengan animasi siklus berjalan khusus dari Membuat Animasi Karakter.Menggunakan proses yang sama ini, Anda dapat menukar salah satu animasi default dengan ID animasi Anda sendiri.

Animasi Berjalan Default
>

Animasi Berjalan Kustom

Buat skrip

Setiap objek karakter Humanoid termasuk anak Animator yang menyimpan semua animasi default karakter.Untuk mengatur salah satu animasi default ini ke ID aset baru, Anda harus membuat skrip di Class.ServiceScriptService sehingga dapat merujuk dan menggantikan nilai default objek Animator segera setelah pemain memuat ke dalam pengalaman.

Untuk membuat skrip yang akan merujuk pada aset animasi default:

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

    1. Pasang mouse di atas ServerScriptService dan klik tombol ⊕.
    2. Dari menu konteks, masukkan Skrip .
  2. Dalam skrip baru, tempel kode berikut:


    local Players = game:GetService("Players")
    local function onCharacterAdded(character)
    local humanoid = character:WaitForChild("Humanoid")
    local animator = humanoid:WaitForChild("Animator")
    print("Animator found!")
    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 masing-masing karakter pemain dimuat ke dalam pengalaman, fungsi onCharacterAdded menunggu sampai 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 diinginkan.

Gantikan assetID

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

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

Tindakan KarakterReferensi Skrip Animasi
Jalankan animateScript.run.RunAnim.AnimationId
Berjalan animateScript.walk.WalkAnim.AnimationId
Lompat animateScript.jump.JumpAnim.AnimationId
Menganggur

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

Jatuh animateScript.fall.FallAnim.AnimationId
Renang

animateScript.swim.Swim.AnimationId

Renang (Menganggur)

animateScript.swimidle.SwimIdle.AnimationId

Naik animateScript.climb.ClimbAnim.AnimationId

Untuk menggantikan aset animasi berjalan default:

  1. Panggil referensi skrip animasi berjalan default, lalu ganti assetID dengan ID animasi khusus Anda sendiri.Sebagai contoh, kode contoh berikut merujuk pada animasi siklus berjalan dari Membuat Animasi Karakter.


    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"
    end
    local function onPlayerAdded(player)
    player.CharacterAdded:Connect(onCharacterAdded)
    end
    Players.PlayerAdded:Connect(onPlayerAdded)
  2. Tes ulang pengalaman Anda untuk memastikan animasi berjalan khusus Anda menggantikan animasi default.

    1. Di bilah alat, klik tombol Mainkan . Studio memasuki mode pengujian.

      Play button highlighted in Studio's playtesting options.
    2. Berjalan di sekitar stasiun ruang angkasa dengan avatar Anda.

Aktifkan animasi

Sementara teknik sebelumnya berfokus pada pertukaran animasi default yang secara otomatis dimainkan setiap kali karakter melakukan tindakan khusus dalam pengalaman, Anda dapat memicu animasi secara programat untuk dimainkan sebagai respons terhadap apa pun tindakan karakter dalam ruang 3D, seperti mengambil item atau mengalami kerusakan dari bahaya.

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

Metode bermain animasi ini berguna karena memberi pemain umpan balik instan tentang bagaimana mereka harus berinteraksi dengan objek di lingkungan mereka.Untuk menunjukkan, bagian berikut menunjukkan cara mengaktifkan animasi setiap kali karakter terlalu dekat dengan kebocoran uap berbahaya sebagai cara untuk diam-diam mengajarkan pemain untuk menghindari berjalan terlalu dekat dengan dinding.

Sisipkan volume

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

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.
Misteri Drive Duvall menggunakan volume untuk memicu peristiwa permainan yang mengubah penampilan visual ruangan.

Saat menambahkan volume ke pengalaman Anda, penting untuk memperluasnya sehingga hanya mencakup ruang yang ingin Anda aktifkan animasinya.Jika Anda membuat volume terlalu kecil, pemain mungkin tidak pernah bertabrakan dengan area untuk memainkan animasi; sebaliknya, jika Anda membuat volume terlalu besar, animasi akan dimainkan sebelum pemain mencapai item atau area minat, dan mereka mungkin tidak mengerti 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. Posisikan dan ubah ukuran blok sampai menutupi area yang ingin Anda aktifkan animasinya.
  3. Di jendela Properti ,
    1. Tetapkan Nama ke Detektor Animasi .

    2. Tetapkan Transparansi ke 1 untuk membuat blok tidak terlihat.

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

Buat skrip

Sekarang Anda memiliki wilayah yang didefinisikan untuk memicu animasi Anda, saatnya untuk membuat skrip yang secara programatik mendeteksi setiap kali pemain bertabrakan dengan volume.Anda kemudian dapat mendengarkan peristiwa kolisi untuk memicu animasi apa pun yang masuk akal untuk persyaratan permainan Anda.

Sebagai contoh, teknik animasi ini menggunakan LocalScript alih-alih Script untuk memberikan umpan balik langsung kepada pemain ketika mereka bertabrakan dengan volume.Jika server mendengarkan kolisi dan memutar animasi, mungkin ada kelambatan antara pemain menyentuh volume di klien dan melihat animasi dimainkan karena waktu replicasi 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 kloning ke karakter pemain saat bergabung dan ketika mereka respawn kembali ke pengalaman.

    1. Perluas Pemain Pemula , lalu hover di atas anaknya StarterCharacterScripts dan klik tombol ⊕.
    2. Dari menu konteks, masukkan LocalScript dan ganti namanya menjadi TriggerAnimasi .
  2. Dalam skrip baru, tempel 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 pada objek Part yang bertindak sebagai volume Anda.

Untuk setiap karakter pemain yang dimuat atau dihidupkan kembali ke dalam pengalaman, skrip menunggu:

  • Objek anaknya Animation , yang akan Anda tambahkan di bagian berikutnya.
  • Objek Humanoid dan Animator karakter.
  • Objek volume di ruang kerja bernama Pendeteksi Animasi .

Ketika sesuatu bertabrakan dengan volume, fungsi penangani acara Touched mendapatkan nenek moyang pertama yang merupakan Model , yang seharusnya menjadi karakter jika BasePart yang bertabrakan dengan volume adalah turunan model karakter.Jika demikian, fungsi kemudian memeriksa apakah adalah karakter pemain lokal.Jika demikian, fungsi kemudian:

  • Mengatur debounce ke true .
  • Memainkan dan menunggu animasi berakhir.
  • Atur debounce kembali ke false .

Mengatur debounce dari false ke true ke false lagi setelah animasi selesai dimainkan adalah pola debounce yang mencegah animasi terus diaktifkan karena pemain terus bertabrakan dengan volume.Untuk informasi lebih lanjut tentang pola debounce ini, lihat Deteksi kolisi .

Tambahkan animasi

Jika Anda ingin menguji pengalaman Anda sekarang, skrip TriggerAnimation Anda masih tidak akan dapat memainkan animasi sebagai respons terhadap kolisi pemutar lokal.Ini karena menunggu objek anak Animation dengan aset animasi yang dapat di referensikan, dan objek itu Animation saat ini tidak ada.

Untuk menambahkan animasi untuk skrip lokal untuk referensi saat pemain bertabrakan dengan volume:

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

    1. Pasang mouse di atas Animasi Trigger dan klik tombol ⊕.
    2. Dari menu konteks, masukkan Animasi .
  2. Pilih objek animasi baru, lalu di jendela Properti , atur AnimationID ke ID animasi yang ingin Anda aktifkan saat pemain menyentuh volume.Sebagai contoh, referensi sampel Stasiun Luar Angkasa Berbahaya untuk memainkan animasi karakter yang jatuh ke belakang.

  3. Uji pengalaman Anda untuk memastikan animasi Anda diputar saat pemain berada dekat dengan kebocoran uap pertama.