Akar gerak - bagaimana ia bekerja
Pohon Blend

Tutorial: Scripting Root Motion untuk animasi humanoid "di-tempat"

Kadang-kadang animasi Anda datang sebagai "di tempat", yang berarti jika Anda meletakkannya di sceneAdegan berisi lingkungan dan menu permainan Anda. Pikirkan setiap file Adegan unik sebagai tingkat yang unik. Di setiap Adegan, Anda menempatkan lingkungan, hambatan, dan dekorasi, pada dasarnya merancang dan membangun permainan Anda dalam potongan-potongan. More info
Lihat di Glossary
, itu tidak akan memindahkan karakter yang ada di. Dengan kata lain, animasi tidak mengandung "root motionGerak simpul akar karakter, apakah itu dikendalikan oleh animasi itu sendiri atau eksternal. More info
Lihat di Glossary
". Untuk ini, kita dapat memodifikasi gerakan akar dari skrip. Untuk menempatkan segalanya bersama-sama mengikuti langkah-langkah di bawah ini (tetap ada banyak variasi untuk mencapai hasil yang sama, ini hanya satu resep).

  • Buka file FBX yang berisi animasi di tempat, dan buka tab inspectorJendela Unity yang menampilkan informasi tentang Pengaturan GameObject yang dipilih saat ini, aset atau proyek, memungkinkan Anda untuk memeriksa dan mengedit nilai. More info
    Lihat di Glossary
    for the FBX file that contains the in-place animation, and go to the Animation tab
  • Pastikan Muscle DefinitionIni memungkinkan Anda untuk memiliki kontrol yang lebih intuitif atas kerangka karakter. Ketika Avatar berada di tempat, sistem Animasi bekerja di ruang otot, yang lebih intuitif daripada ruang tulang. More info
    Lihat di Glossary
    ditetapkan ke AvatarAntarmuka untuk penargetan ulang animasi dari satu rig ke yang lain. More info
    Lihat di Glossary
    yang ingin Anda kendalikan (katakan avatar ini disebut Dude, dan telah ditambahkan ke Hierarchy View).
  • Pilih animation clipAnimasi data yang dapat digunakan untuk karakter animasi atau animasi sederhana. Ini adalah bagian "unit" sederhana dari gerakan, seperti (salah satu contoh spesifik) "Idle", "Walk" atau "Run". More info
    Lihat di Glossary
    dari klip yang tersedia
  • Pastikan Loop PosePengaturan klip animasi yang memadukan ujung dan memulai animasi untuk membuat bergabung mulus. More info
    Lihat di Glossary
    benar dilaraskan (cahaya di sebelah hijau), dan bahwa kotak centang untuk Loop Pose diklik
  • Pratinjau animasi di pemirsa animasi untuk memastikan awal dan akhir animasi sejajar dengan lancar, dan bahwa karakter bergerak “di-tempat”
  • Pada klip animasi membuat kurva yang akan mengontrol kecepatan karakter (Anda dapat menambahkan kurva dari Animation Import inspector Curves-> +)
  • Nama yang kurva sesuatu yang berarti, seperti "Runspeed"
  • Membuat Animator ControllerKontrol animasi melalui Lapisan Animasi dengan Mesin Negara Animasi dan Pohon Animasi Blend, dikendalikan oleh Parameter Animasi. Pengontrol Animator yang sama dapat direferensikan oleh beberapa model dengan komponen Animator. More info
    Lihat di Glossary
    baru, (let menyebutnya RootMotionController)
  • Drop klip animasi yang diinginkan ke dalamnya, ini harus menciptakan keadaan dengan nama animasi (katakan Run)
  • Tambahkan parameter ke Pengontrol dengan nama yang sama dengan kurva (dalam kasus ini, “Runspeed”)
  • Pilih karakter Dude di Hierarchy, yang inspektur harus memiliki komponen Animator.
  • Seret RootMotionController ke properti Controller Animator
  • Jika Anda menekan bermain sekarang, Anda harus melihat "Dude" berjalan di tempat

Akhirnya, untuk mengontrol gerakan, kita perlu membuat skrip (RootMotionScript.cs), yang mengimplementasikan callback OnAnimatorMove:-

using UnityEngine;
using System.Collections;

[RequireComponent(typeof(Animator))]
    
public class RootMotionScript : MonoBehaviour {
            
    void OnAnimatorMove()
    {
            Animator animator = GetComponent<Animator>(); 
                              
            if (animator)
            {
     Vector3 newPosition = transform.position;
               newPosition.z += animator.GetFloat("Runspeed") * Time.deltaTime; 
     transform.position = newPosition;
            }
    }
}


Anda harus melampirkan RootMotionScript.cs ke objek "Dude". Ketika Anda melakukan ini, Animator componentKomponen pada model yang merupakan model yang menggunakan sistem Animasi. Komponen ini memiliki referensi aset Animator Controller yang mengontrol animasi. More info
Lihat di Glossary
akan mendeteksi bahwa script memiliki fungsi OnAnimatorMove dan menunjukkan properti Apply Root Motion sebagai Handled by Script

Akar gerak - bagaimana ia bekerja
Pohon Blend