Kebanyakan animasi diproduksi dengan memutar sudut sendi dalam kerangka untuk nilai yang telah ditentukan. Posisi perubahan jointKomponen fisika yang memungkinkan koneksi dinamis antara komponen Rigidbody, biasanya memungkinkan beberapa tingkat pergerakan seperti engsel. More info
Lihat di Glossary anak sesuai dengan rotasi induknya dan sehingga titik akhir rantai sendi dapat ditentukan dari sudut dan posisi relatif dari sendi individu yang mengandung. Metode ini berpose skeleton dikenal sebagai forward kinematicsThe geometry that describes the position and orientation of a character’s joints and bodies. Used by inverse kinematics to control character movement.
See in Glossary.
Namun, seringkali berguna untuk melihat tugas berpose sendi dari sudut pandang berlawanan - mengingat posisi yang dipilih di ruang, bekerja mundur dan menemukan cara yang valid untuk orientasi sendi sehingga titik akhir mendarat pada posisi itu. Ini dapat berguna ketika Anda ingin karakter untuk menyentuh objek pada titik yang dipilih oleh pengguna atau menanam kakinya meyakinkan pada permukaan yang tidak rata. Pendekatan ini dikenal sebagai Inverse Kinematics (IK) dan didukung di Mecanim untuk setiap karakter humanoid dengan dikonfigurasi dengan benar Login.
Untuk mengatur IK untuk karakter, Anda biasanya memiliki benda di sekitar 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 bahwa karakter berinteraksi dengan, dan kemudian mengatur IK melalui script, khususnya, fungsi Animator seperti SetIKPositionWeight, SetIKRotationWeight, SetIKPosition, SetIKRotation, SetLookAtPosition, bodyPosition, bodyRotation
Dalam ilustrasi di atas, kami menunjukkan karakter mengambil objek silinder. Bagaimana kita melakukan hal ini?
Kita mulai dengan karakter yang memiliki AvatarAntarmuka untuk penargetan ulang animasi dari satu rig ke yang lain. More info
Lihat di Glossary yang valid.
Selanjutnya buat 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 dengan mengandung setidaknya satu animasi untuk karakter. Kemudian di lapisan pane Animator windowJendela di mana Animator Controller divisualkan dan diedit. More info
Lihat di Glossary, klik ikon pengaturan cog Layer dan dan periksa kotak centang IK Pass di menu yang muncul.
Pastikan Animator Controller ditugaskan ke 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 karakter: %
Selanjutnya, melampirkan skrip yang benar-benar mengurus IK, mari kita sebutkan IKControl. Script ini menetapkan target IK untuk tangan kanan karakter, dan posisi tampilannya untuk membuatnya melihat objek yang memegang:
using UnityEngine;
using System;
using System.Collections;
[RequireComponent(typeof(Animator))]
public class IKControl : MonoBehaviour {
protected Animator animator;
public bool ikActive = false;
public Transform rightHandObj = null;
public Transform lookObj = null;
void Start ()
{
animator = GetComponent<Animator>();
}
//a callback for calculating IK
void OnAnimatorIK()
{
if(animator) {
//if the IK is active, set the position and rotation directly to the goal.
if(ikActive) {
// Set the look target position, if one has been assigned
if(lookObj != null) {
animator.SetLookAtWeight(1);
animator.SetLookAtPosition(lookObj.position);
}
// Set the right hand target position and rotation, if one has been assigned
if(rightHandObj != null) {
animator.SetIKPositionWeight(AvatarIKGoal.RightHand,1);
animator.SetIKRotationWeight(AvatarIKGoal.RightHand,1);
animator.SetIKPosition(AvatarIKGoal.RightHand,rightHandObj.position);
animator.SetIKRotation(AvatarIKGoal.RightHand,rightHandObj.rotation);
}
}
//if the IK is not active, set the position and rotation of the hand and head back to the original position
else {
animator.SetIKPositionWeight(AvatarIKGoal.RightHand,0);
animator.SetIKRotationWeight(AvatarIKGoal.RightHand,0);
animator.SetLookAtWeight(0);
}
}
}
}
Seperti yang kita tidak berniat untuk tangan karakter untuk mencapai di dalam objek ke pusatnya (titik pivot silinder), kita memposisikan objek anak kosong (dalam kasus ini, bernama “Cylinder Grab Handle”) di mana tangan harus berada di silinder, dan memutarnya sesuai. Tangan kemudian menargetkan objek anak ini.
Pegangan “grab” Login Objek kemudian harus ditugaskan sebagai properti "Right Hand Obj" dari skrip IKControl
Dalam contoh ini, kita memiliki target terlihat diatur ke silinder itu sendiri, sehingga karakter terlihat langsung ke pusat objek meskipun pegangan dekat bagian bawah.
Masukkan mode bermain, dan Anda harus melihat IK datang ke kehidupan. Mengamati pola karakter dan mengukir objek saat Anda mengeklik kotak centang IKActive, dan mencoba memindahkan silinder di sekitar playmode untuk melihat lengan dan tangan mengikuti objek.