Animasi karakter bermain adalah bagian penting dari apa yang membuat avatar dan karakter non-playable (NPC) ekspresif, realistis, dan menarik untuk penonton Anda. Selain memberikan visual yang menarik, animasi karakter memberikan pemain umpan balik 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 cara bermain animasi karakter menggunakan dua teknik yang berbeda, termasuk panduan tentang:
- Menukar asset animasi karakter default Anda dengan animasi kustom Anda sendiri.
- Mengaktifkan animasi dalam responsi terhadap tindakan karakter dalam ruang 3D.
Setelah Anda menyelesaikan tutorial ini, Anda akan memiliki keterampilan untuk menyesuaikan animasi untuk berbagai situasi gameplay.
Mengubah Animasi Standar
Setiap karakter dengan objek Humanoid pengaturan default, baik itu avatar pemain atau karakter non-player (NPC), termasuk set animasi default yang dimainkan setiap kali karakter melakukan tindakan khusus dalam pengalaman, seperti menjalankan, menaiki, dan melompat. Roblox menyediakan animasi ini out-of-the
Jika animasi default ini tidak memenuhi persyaratan desain untuk lingkungan, estetika, atau narasi dunia Anda, Anda dapat menukarnya dengan animasi khusus yang diterapkan untuk setiap pemain yang bergabung dengan pengalaman Anda. Teknik desain game ini dapat membantu karakter dan pengalaman Anda merasa lebih pribadi, berinteraksi, dan imersif.
Untuk menunjukkan, bagian berikut mengajarkan Anda cara beralih animasi berjalan default dengan animasi berjalan khusus dari Pembuatan Animasi Karakter . Menggunakan proses yang sama ini, Anda dapat beralih setiap animasi default dengan aset animasi Anda sendiri.
Buat Skrip
Objek setiap karakter Humanoid meng包括一个子对象 Animator yang menyimpan semua animasi default karakter. Untuk menetapkan salah satu dari animasi default ini ke new assetID, Anda harus menciptakan script di Class.ServiceScriptService
Untuk membuat skrip yang akan mengacu pada ID animasi default:
Di jendela Explorer , tambahkan skrip baru ke ServerScriptService .
- Hover over ServerScriptService dan klik tombol ⊕.
- Dari menu konteks, sisipkan Skrip .
Dalam naskah 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!")local function onPlayerAdded(player)player.CharacterAdded:Connect(onCharacterAdded)endPlayers.PlayerAdded:Connect(onPlayerAdded)
Skrip ResetDefaultAnimations dimulai dengan mengambil layanan Players, yang mengandung semua objek Player untuk pemain saat mereka terhubung ke server. Ketika masing-masing karakter p
Ketika mendeteksi objek Animator untuk pertama kalinya, script kemudian mencetak "Animator ditemukan!" untuk memberi tahu Anda bahwa script bekerja seperti yang diharapkan.
Ganti AssetID
Sekarang Anda tahu bahwa skrip Anda dapat mendeteksi ketika pemain memuat dan terhubung ke server, Anda dapat mengubah skrip Anda untuk mengacu secara khusus pada id animasi (s) yang ingin Anda tukar dengan animasi khusus Anda.
Tabel berikut menunjukkan semua animasi karakter default yang dapat Anda panggil dan ganti dalam objek Animator ini. Catat bahwa Idle memiliki dua variasi yang dapat Anda program untuk dimainkan lebih sering atau lebih jarang.
Tindakan Karakter | Referensi 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 |
Jatuhkan | animateScript.fall.FallAnim.AnimationId |
Berenang | animateScript.swim.Swim.AnimationId |
Berenang (Santai) | animateScript.swimidle.SwimIdle.AnimationId |
Naik | animateScript.climb.ClimbAnim.AnimationId |
Untuk mengganti aset animasi berjalan default:
Panggil script referensi animasi berjalan default, lalu ganti asetID dengan aset animasi khusus Anda. Misalnya, kode contoh berikut menunjukkan animasi siklus berjalan dari Menggambar 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"local function onPlayerAdded(player)player.CharacterAdded:Connect(onCharacterAdded)endPlayers.PlayerAdded:Connect(onPlayerAdded)Tes ulang pengalaman Anda untuk memastikan animasi berjalan khusus Anda mengalahkan animasi default.
Di bilah menu, klik tombol Bermain . Studio memasuki mode pengujian.
Berjalan di sekitar stasiun ruang angkasa dengan avatar Anda.
Mengaktifkan Animasi
Sementara teknik sebelumnya berfokus pada beralih animasi default yang otomatis bermain setiap kali karakter melakukan tindakan khusus dalam pengalaman, Anda dapat secara programistik mengaktifkan animasi untuk dimainkan dalam respons terhadap tindakan karakter apa pun dalam ruang 3D, seperti mengambil item atau mengambil kerusakan dari bahaya.
Metode ini untuk bermain animasi berguna karena memberi pemain umpan balik instan tentang cara 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 menunjukkan bahwa pemain harus menghindari berjalan terlalu dekat dengan tembok.
Sisipkan Volume
Salah satu cara paling umum untuk mengaktifkan perilaku gameplay yang unik adalah menggunakan volume , atau wilayah tidak terlihat di dalam ruang 3D, untuk mendeteksi ketika pemainatau objek berinteraksi dengan daerah tertentu dari lingkungan. Saat Anda menggabungkan volume dengan skrip, Anda dapat menggunakan umpan balik ketukan untuk secara programatik menetapkan tindakan
Saat menambahkan volume ke pengalaman Anda, penting untuk menyesuaikannya agar hanya menutupi ruang yang Anda inginkan untuk menyalakan animasi Anda. Jika Anda membuat volume Anda terlalu kecil, pemain mungkin tidak akan pernah bertabrakan dengan area untuk memutar animasi; sebaliknya, jika Anda membuat volume Anda terlalu besar, animasi akan dimainkan sebelum pemain mencapai item atau
Untuk menyisipkan volume di sekitar kebocoran uap yang akan mengaktifkan animasi:
- Dalam jendela Explorer , tambahkan bagian blok baru.
- Posisi dan ukur ulang blok sampai area yang ingin Anda gunakan untuk mengaktifkan animasi Anda.
- Di jendela Properti ,
Tetapkan Nama ke Detektor Animasi .
Tetapkan Transparansi ke 1 untuk membuat blok tidak terlihat.
Buat Skrip
Sekarang Anda memiliki wilayah yang ditentukan untuk memicu animasi Anda, saatnya untuk menciptakan skrip yang secara programistik mendeteksi setiap kali pemain bertabrakan dengan volume. Anda kemudian dapat mendengarkan acara tabrakan untuk menyetel animasi yang masuk akal untuk persyaratan gameplay Anda.
Misalnya, teknik animasi ini menggunakan LocalScript alih-alih Script untuk memberikan umpan balik pemain langsung ketika mereka bertabrakan dengan volume. Jika server mendengarkan untuk bertabrakan dan memutar animasi, mungkin ada kesalahan antara pemain menyentuh volume di klien mereka dan melihat animasi bermain kare
Untuk membuat skrip lokal yang akan mendeteksi ketika karakter pemain lokal menyentuh volume:
Dalam jendela Explorer , tambahkan skrip baru ke StarterCharacterScripts . Penempatan ini menjamin skrip dan anaknya menyalin ke karakter pemain saat bergabung dan ketika mereka respawn kembali ke pengalaman.
- Jadilah StarterPlayer , lalu geser over its StarterCharacterScripts anak dan klik tombol ⊕.
- Dari menu konteks, sisipkan Skrip Lokal dan ganti nama TriggerAnimation .
Dalam naskah 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 = falseanimationDetector.Touched:Connect(function(hit)if debounce thenreturnendlocal hitCharacter = hit:FindFirstAncestorWhichIsA("Model")if hitCharacter ~= localCharacter thenreturnenddebounce = trueanimationTrack:Play()animationTrack.Ended:Wait()debounce = falseend)
Skrip TriggerAnimation dimulai dengan mendapatkan layanan Workspace, yang mengandung semua objek yang ada di dunia 3D. Ini penting karena script perlu mengacu pada objek Part yang bertindak sebagai volume Anda.
Untuk setiap karakter pemain yang memuat atau respawn kembali ke pengalaman, script menunggu:
- Objek anaknya Animation yang akan Anda tambahkan di bagian berikutnya.
- Objek volume di ruang kerja bernama AnimationDetector .
Ketika sesuatu bertabrakan dengan volume, fungsi Touched mengambil pendahulu pertama yang merupakan Model, yang harus menjadi karakter jika BasePart yang bertabrakan dengan volume adalah n
- Tetapkan debounce ke true .
- Bermain dan menunggu animasi akhiri.
- Tetapkan debounce kembali ke false .
Mengatur debounce dari false ke true ke false setelah animasi berakhir bermain adalah pola debounce yang mencegah animasi berulang kali mengaktifkan saat pemain terus bertabrakan dengan volume. Untuk informasi lebih lanjut tentang pola debounce ini, lihat 1>Mendeteksi Tabrakan1>.
Tambah Animasi
Jika Anda melakukan playtest pengalaman Anda sekarang, skrip TriggerAnimation Anda masih tidak akan dapat memutar animasi dalam menanggapi kolisi pemain lokal. Ini karena ia menunggu untuk anak Animation dengan aset animasi yang dapat di참조, dan Animation objek tidak sah saat ini.
Untuk menambahkan animasi untuk skrip lokal untuk diacak pemain dengan volume:
Dalam jendela Explorer , tambahkan animasi baru ke TriggerAnimation .
- Hover over Animasi Pencetakan and click the ⊕ button.
- Dari menu konteks, sisipkan Animasi .
Pilih objek animasi baru, lalu di jendela Propinsi , atur AnimationID ke animasi asetID yang ingin Anda aktifkan ketika pemain menyentuh volume. Misalnya, sampel Hazardous Space Station mengacungkan 1> rbxassetid://37164687741> untuk memainkan animasi karakter jatuh ke belakang
Uji kinerja animasi Anda untuk memastikan animasi Anda bermain ketika pemain mendekati penyebab kebocoran pertama.