IKControl

Tampilkan yang Tidak Digunakan Lagi

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

IKControl instans membuat posisi animasi prosedural menggunakan Kinematika Terbalik (IK).Mereka memungkinkan Anda untuk membuat karakter merespon secara realistis terhadap lingkungan mereka.

Misalnya, Anda dapat membuat karakter menempatkan tangannya di pegangan pintu dengan tepat, dan karakter akan melakukannya secara independen dari posisinya.IKControls memberikan keuntungan perlu membuat lebih sedikit animasi untuk permainan Anda sambil memberikan pengalaman Anda perasaan yang lebih realistis dan dipoles.

IKControls harus menjadi anak dari Humanoid atau AnimationController dengan Animator dan memiliki semua properti yang diperlukan diatur dengan benar, jika tidak mereka tidak memiliki efek.Properti yang diperlukan adalah Type , EndEffector , Target , ChainRoot .Saat mereka ditetapkan, modul IkControl memodifikasi posisi karakter Anda seperti yang Anda spesifikasikan.Contoh kode berikut menunjukkan cara mengatur pertama Anda IKControl dan mulai membuat animasi yang lebih realistis untuk gameAnda.

Anda dapat menggunakan IKControls untuk membuat karakter:

  • Putar kepalanya dan torso untuk melihat titik minat di dunia.
  • Modifikasi posisi kakinya untuk menanggapi medan dinamis. Sesuaikan kakinya dan kakinya untuk menempatkannya sesuai di medan dengan batu dan lereng.
  • Pegang senjata dan letakkan tangannya dengan tepat di pegangan tanpa perlu membuat animasi untuk setiap senjata dalam game.
  • Bertujuan pada titik di dunia, sehingga ujung pistol tepat menuju apa yang ingin Anda tembak. Terutama berguna di penembak orang ketiga.
  • Letakkan tangannya di roda kemudi mobil dan ikuti saat berputar.
  • Banyak lagi!

IKControl akan menggantikan animasi untuk semua bagian antara ChainRoot dan EndEffector .Anda dapat mengaktifkan/menonaktifkannya menggunakan Enabled atau mengubah seberapa besar mereka memiliki efek atas animasi dasar menggunakan Weight .Hati-hati: jika Anda tidak mengatur IKControls dengan benar, Anda mungkin menghasilkan posisi buruk dan tidak realistis!

Contoh Kode

This sample shows the basic setup for an IKControl that moves a character's left arm to reach for a point in the world.

IKControl setup

local character = script.Parent.Character
local humanoid = character.Humanoid
local root = character.HumanoidRootPart
-- Create a new attachment to use as the IKControl.Target
local target = Instance.new("Attachment")
target.CFrame = CFrame.new(-1, 0, -1)
target.Parent = root
local ikControl = Instance.new("IKControl")
ikControl.Type = Enum.IKControlType.Position
ikControl.EndEffector = character.LeftHand
ikControl.ChainRoot = character.LeftUpperArm
ikControl.Target = target
ikControl.Parent = humanoid

Rangkuman

Properti

  • Baca Paralel

    Bagian terakhir yang Anda tertarik untuk memindahkan karakter Anda.Sebagai contoh, lengan atas.Harus menjadi leluhur dari EndEffector dan menjadi BasePart atau Bone dalam karakter Anda.

  • Baca Paralel

    Mengubah kontrol pada dan mati. Benar secara default.

  • Baca Paralel

    Bagian yang Anda tertarik pindah untuk mencapai Target .Sebagai contoh, tangan karakter Anda.Harus menjadi keturunan dari ChainRoot dan menjadi BasePart atau Bone di karakter Anda.

  • Offset tambahan yang diterapkan di atas EndEffector di ruang lokal untuk mengubah tempat di mana ia bergerak.

  • Baca Paralel

    Offset tambahan yang diterapkan di atas Target untuk mengubah di mana EndEffector bergerak.

  • Baca Paralel

    Instansi opsional yang menentukan ke arah mana rantai melengkung. Anda dapat menggunakan ini untuk menentukan ke arah mana lengkungan lutut atau siku.

  • Baca Paralel

    Menentukan urutan di mana kontrol diselesaikan. Nilai yang lebih tinggi memiliki prioritas lebih tinggi.

  • Baca Paralel

    Menentukan rata-rata jumlah detik yang dibutuhkan untuk EndEffector untuk mulus mencapai Target .

  • Baca Paralel

    Objek yang EndEffector mencapai atau menunjukkan.Ini bisa apa saja yang memiliki posisi di dunia, seperti BasePart , Attachment , Bone , atau Motor6D .

  • Mengidentifikasi bagaimana solver memenuhi kontrol ini.

  • Baca Paralel

    Menentukan berat target kontrol IK. Harus berada dalam kisaran [0, 1].

Properti

ChainRoot

Baca Paralel

Dengan menypesifikasikan ChainRoot dan EndEffector, Anda menginstruksikan IKControl bahwa diperbolehkan untuk memindahkan dan memutar semua bagian di antara keduanya untuk memindahkan EndEffector ke Target.Sebagai contoh, jika Anda menentukan LeftHand sebagai EndEffector dan LeftUpperArm sebagai ChainRoot , kontrol akan memindahkan 3 bagian: LeftHand, LeftLowerArm, dan LeftUpperArm.Hindari mengatur ChainRoot sebagai akar sebenarnya dari karakter karena itu menghasilkan hasil yang tidak realistis.

Enabled

Baca Paralel

Properti ini memungkinkan Anda untuk menyalakan dan mematikan kontrol IK.Ini diaktifkan secara default.Ketika Enabled palsu, kontrol IK dinonaktifkan dan tidak diselesaikan oleh solver dasar.

EndEffector

Baca Paralel

The EndEffector menjelaskan bagian terakhir dalam rantai karakter Anda yang ingin Anda pengaruhi.Sebagai contoh, bisa jadi tangan saat Anda ingin memindahkan seluruh lengan untuk mencapai titik.Ini bisa menjadi BasePart pada karakter, yang memiliki Motor6D sebagai anaknya, Motor6D langsung, Bone , atau Attachment .Pivot dari EndEffector yang dipilih bergerak ke Target , sehingga Anda dapat menggunakan Attachments untuk memodifikasi titik mana dari BasePart yang harus mencapai Target .

EndEffectorOffset

Baca Paralel

Offset efek akhir adalah tambahan CFrame diterapkan di atas Target``Datatype.CFrame yang menghasilkan akhir CFrame digunakan untuk menempatkan EndEffector .Secara default, itu adalah identitas CFrame, jadi jika Anda tidak mengatur, tidak ada efek dan EndEffector menggunakan Target``Datatype.CFrame langsung, yang ditentukan di ruang lokal dari EndEffector .

Alternatifnya, Anda dapat menggunakan lampiran dengan menetapkan lampiran sebagai EndEffector , yang memindahkannya ke Target bukannya bagian yang terkait dengannya, secara efektif mendapatkan hasil yang sama.

Anda juga dapat menggunakan EndEffectorOffset untuk memodifikasi sumbu mana dari EndEffector yang harus menunjuk ke Target ketika menggunakan LookAt sebagai Type .

Offset

Baca Paralel

Offset adalah tambahan CFrame diterapkan di atas Target``Datatype.CFrame yang menghasilkan akhir CFrame yang digunakan untuk menempatkan EndEffector .Ini adalah identitas default, jadi jika Anda tidak mengatur, tidak ada efek dan EndEffector akan menggunakan Target``Datatype.CFrame langsung.Anda dapat menganimasikannya untuk membuat animasi prosedural seperti mengetik di keyboard.Berguna ketika Target dan EndEffector tidak berbaris dan Anda perlu memperbaikinya dengan rotasi atau terjemahan tambahan.

Baca Paralel

The Pole adalah opsional Instance yang memberi Anda kontrol atas bagaimana bagian intermediat di karakter Anda harus melengkung.Ini bisa apa saja yang memiliki posisi di dunia, seperti BasePart , Attachment , Bone , Motor6D .Ini adalah default nil .Ketika Anda menentukannya, solver dasar akan membuat bagian melengkung ke arahnya.Ketika ini nil , solver akan mencoba membuat lengkungan lutut dan siku tepat sesuai dengan anggota tubuh karakter.Limb akan menjadi "Lengan" ketika Anda memilih sebagai entah itu Tangan Kiri atau Tangan Kanan dan sebagai lengan yang sesuai Kaki Kiri atau Kaki Kanan , dan akan menjadi "Kaki" ketika Anda memilih sebagai entah itu Kaki Kiri atau Kaki Kanan dan sebagai lengan yang sesuai Kaki Kanan atau Kaki Kanan .Dalam semua kasus lain, jika Anda tidak menentukan tiang, rantai mungkin tidak melengkung seperti yang Anda harapkan.

Priority

Baca Paralel

Ketika beberapa kontrol aktif pada karakter, urutan di mana mereka diselesaikan oleh sistem dasar memengaruhi pose akhir yang dihasilkan.Dengan mengubah nilai ini, Anda menentukan perintah di mana kontrol dipenuhi.Nilai yang lebih tinggi memiliki prioritas lebih tinggi, dan kontrol prioritas tinggi diselesaikan nanti karena hasilnya dapat menggantikan hasil sebelumnya dari kendalilain.Jika Anda memiliki beberapa kontrol IK pada karakter dan salah satunya lebih penting dari yang lain, spesifikasikan prioritas yang lebih rendah untuk itu.Ini adalah 0 secara default, artinya semua kontrol memiliki prioritas yang sama.

SmoothTime

Baca Paralel

Nilai ini menentukan rata-rata jumlah detik yang diperlukan untuk EndEffector mencapai Target.Perilaku tersebut adalah perilaku musim semi yang kritis, di mana tingkat perubahan proporsional dengan jarak ke target dan tidak ada oscilasi saat mendekati target.Nilai yang lebih kecil membuat konvergensi lebih cepat, dan nilai yang lebih besar membuat konvergensi lebih lambat.Nilai 0 menonaktifkan penyглаживание.Nilai default adalah 0,05 untuk memberikan penyempurnaan sangat ringan yang membuat gerakan terasa realistis.

Target

Baca Paralel

The Target mewakili titik ( CFrame ) di dunia yang ingin Anda capai EndEffector .Perilaku tepat mencapai dapat ditetapkan melalui properti Type, dan tambahan Offset dapat diterapkan di atasnya untuk memodifikasinya.Jika Anda mengatur Target yang akan dipindahkan oleh fisika atau skrip, di setiap frame IKControl akan mencoba untuk memuaskannya, secara otomatis memperbarui titik yang harus dicapai.

Baca Paralel

Dengan mengubah Type, Anda dapat mengubah perilaku kontrol. Ini adalah opsi yang tersedia:

Weight

Baca Paralel

Anda dapat mengontrol seberapa banyak kontrol tertentu mempengaruhi pose karakter dengan menggunakan properti ini.Nilai harus berada dalam kisaran [0, 1].0 berarti tidak ada efek, dan 1 berarti efek penuh dari kontrol IK.Nilai di luar rentang ini dipotong.Mengubah nilai ini secara halus memungkinkan Anda untuk mencampurkan atau keluar dari kontrol tertentu untuk menghindari gerakan mencolok.Ini adalah 1 secara default.

Berat menentukan faktor interpolasi antara Efek Akhir dan target IK.Mengatur berat ke 0 tidak menonaktifkan Kontrol IK karena faktor lain, termasuk faktor penyamaran SmoothTime dan Pole, masih dapat mengubah posisi.Untuk benar-benar menonaktifkan Kontrol IK, ubah properti Enabled menjadi false.

Metode

GetChainCount


Memberikan nilai

GetChainLength


Memberikan nilai

GetNodeLocalCFrame

Parameter

index: number
Nilai Default: ""

Memberikan nilai

GetNodeWorldCFrame

Parameter

index: number
Nilai Default: ""

Memberikan nilai

GetRawFinalTarget


Memberikan nilai

GetSmoothedFinalTarget


Memberikan nilai

Acara