IKControl
*Bu içerik, yapay zekâ (beta) kullanılarak çevrildi ve hatalar içerebilir. Sayfayı İngilizce görüntülemek için buraya tıkla.
IKControl örnekleri, Ters Kinematik'i (IK) kullanarak prosedürel animasyon pozları üretir.Karakterlerin çevrelerine gerçekçi bir şekilde yanıt vermesine izin verirler.
Örneğin, bir karakterin elini kapı kolu üzerine koymasını sağlayabilir ve karakter bunu pozisyonundan bağımsız olarak yapar.IKControls, deneyiminize daha gerçekçi ve işlenmiş bir his verirken oyununuz için çok daha az animasyon oluşturmanızın avantajını sağlar.
IKControls bir çocuk olmalıdır Humanoid veya AnimationController bir Animator ve tüm gerekli özellikleri doğru bir şekilde ayarlanmalı, aksi takdirde hiçbir etkisi yoktur.Gerekli özellikler Type , EndEffector , Target , ChainRoot dir.Bunlar ayarlandığında, IkControl karakterinizin pozunu belirttiğiniz gibi değiştirir.Aşağıdaki kod örneği, ilk IKControl oluşturmanın ve oyununuz için daha gerçekçi animasyonlar oluşturmaya başlamanın nasıl yapılacağını gösterir.
Karakter oluşturmak için IKControls'u kullanabilirsiniz:
- Dünyadaki bir ilgi noktasına bakmak için başını ve torso'sunu döndürün.
- Dinamik araziye yanıt vermek için ayak pozisyonlarını değiştirin. Bacaklarını ve ayaklarını kayalarla ve dikliklerle araziye yerleştirmek için ayarlayın.
- Bir silah tutun ve oyundaki her silah için animasyon oluşturmak zorunda kalmadan kavrayı uygun bir şekilde yerleştirin.
- Dünyanın bir noktasına hedef alın, böylece silahın ucu doğruca vurmak istediğiniz şeye doğru olur. Özellikle üçüncü şahıs nişancılarında yararlıdır.
- Ellerini bir arabanın direksiyonuna yerleştirin ve döndüğünde takip edin.
- Daha fazlası!
IKControl , ChainRoot ve EndEffector arasındaki tüm parçalar için animasyonu geçersiz kılacaktır.Bunu Enabled kullanarak etkinleştirebilir/devre dışı bırakabilir veya Weight kullanarak temel animasyon üzerindeki etkilerini değiştirebilirsiniz.Dikkatli olun: eğer IKControls doğru yapılandırmadıysanız, kötü ve gerçekçi olmayan pozlar üretebilirsiniz!
Kod Örnekleri
This sample shows the basic setup for an IKControl that moves a character's left arm to reach for a point in the world.
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
Özet
Özellikler
Karakterinizi hareket ettirmeye ilgi duyduğunuz son bölüm.Örneğin, üst kol.Bir ata olmalı EndEffector ve karakterinizde bir BasePart veya bir Bone olmalıdır.
Kontrolü açar ve kapatır. Varsayılan olarak doğrudur.
Ulaşmak için ilgilendiğiniz parça Target .Örneğin, karakterinizin eli.ChainRoot 'in bir soyundan gelmeli ve karakterinizde bir BasePart veya bir Bone olmalıdır.
Hareket ettiği yeri değiştirmek için yerel alanındaki EndEffector üzerine ek bir ofset uygulanır.
Nerede hareket edeceğini değiştirmek için Target üzerine ek bir ofset uygulanır EndEffector .
Zincirin hangi yönde büküleceğini belirleyen opcional bir örnek. Bunu, bir dirseğin veya dizin hangi yönde büküleceğini belirtmek için kullanabilirsiniz.
Kontrollerin çözüldüğü sırayı belirtir. Daha yüksek değerler daha yüksek önceliğe sahiptir.
EndEffector 'nin sorunsuz bir şekilde Target 'ye ulaşması için ortalama saniye sayısını belirtir.
EndEffector tarafından ulaşılan veya işaret edilen nesne.Dünyada bir konumu olan her şey olabilir, örneğin BasePart , Attachment , Bone veya Motor6D .
Çözücünün bu kontrolü nasıl karşıladığını belirtir.
IK kontrol hedefinin ağırlığını belirtir. [0, 1] aralığında olmalıdır.
Yöntemler
Özellikler
ChainRoot
Bir ChainRoot ve bir EndEffector belirterek, tüm parçaların arasında hareket etmesine ve dönmesine izin verildiğini IKControl bildirin, böylece EndEffector 'yi Target 'ya taşıyın.Örneğin, LeftHand'i EndEffector ve LeftUpperArm'i ChainRoot olarak belirterseniz, kontrol 3 parça hareket eder: LeftHand, LeftLowerArm ve LeftUpperArm.Karakterin gerçek kökü olarak ChainRoot ayarlanmasından kaçının, çünkü bu gerçekçi olmayan sonuçlar üretir.
Enabled
Bu özellik, IK kontrolünü açıp kapatmanıza izin verir.Varsayılan olarak açık.When Enabled false olduğunda, IK kontrolü kapalıdır ve temel çözücü tarafından çözülmez.
EndEffector
The EndEffector karakterinizin etkilemek istediğiniz zincirindeki son parçasını tanımlar.Örneğin, tüm kolun bir noktaya ulaşması için hareket etmek istediğinizde el olabilir.Bir karakter üzerinde olabilir BasePart , çocuk olarak bir Motor6D var, doğrudan bir Motor6D , veya bir Bone veya bir Attachment .Seçilen EndEffector 'nin merkezi Target 'ye taşınır, böylece Attachments 'nin hangi noktasının BasePart ulaşması gerektiğini değiştirmek için Target kullanabilirsiniz.
EndEffectorOffset
Son etki noktası ofseti, CFrame üstüne uygulanan ek bir Target ile son CFrame yerleştirilen CFrame kullanılan EndEffector yerleştirilmesi üretir.Varsayılan olarak, kimlik CFrame'dir, bu yüzden onu ayarlamadığınız takdirde hiçbir etkisi yoktur ve doğrudan yerel alanında belirtilen kullanır, ki bu , 'de belirtilir.
Alternatif olarak, bir eklentiyi EndEffector olarak ayarlayarak eklentileri kullanabilirsiniz, bu da onu bağlı olduğu parçalar yerine Target taşır ve aynı sonuçetkili bir şekilde elde eder.
Ayrıca kullanarak hangi eksenin üzerinde işaret etmesi gerektiğini değiştirebilirsiniz kullanırken .
Offset
Ofset, son yerleştirmek için kullanılan üzerine ek bir uygulanır, ki bu da son yerleştirmek için kullanılan kullanılır.Varsayılan olarak kimliğidir, bu yüzden eğer ayarlamazsanız, hiçbir etkisi yoktur ve Class.IKControl.EndEffector|EndEffector``Class.IKControl.Target|Target``Datatype.CFrame doğrudan kullanacaktır.Bir klavyede yazma gibi prosedüral animasyonlar oluşturmak için onu animasyonlaştırabilirsiniz.Target ve EndEffector uyumlu olmadığında ve bunu ek bir dönüş veya çeviriyle düzeltmeniz gerektiğinde yararlıdır.
Pole
The Pole isteğe bağlı bir Instance ve karakterinizdeki geçici parçaların nasıl büküleceği konusunda kontrol sağlar.Dünyada bir konumu olan her şey olabilir, örneğin BasePart , Attachment , Bone , Motor6D .Varsayılan olarak nil dir.Bunu belirttiğinizde, temel çözücü parçaları ona doğru eğecektir.Bunun nil olduğunda, çözücü karakterin eklemlerini ve dizlerini karakterin uzuvuna göre uygun bir şekilde bükmeye çalışacaktır.Bacak, ya SolEl veya SağEl veya SolÜstBacak veya SağÜstBacak seçtiğinizde "Kol" olacak ve "Bacak" olacak, ya SolAyak veya SağAyak seçtiğinizde ve "Bacak" olacak, ya SolAyak veya SağAyak seçtiğinizde ve "Bacak" olacak, ya SolAyak veya SağAyak seçtiğinizde ve "Bacak" olacak, ya SolAyak veya SağAyak seçtiğinizde ve "Bacak" olacak, ya SolAyak veya SağAyak seçtiğinizde ve "Bacak" olacak, ya SolAyak veya SağAyak ve SağAyak ya SolAyak veya SağAyak veya SağAyak "Bacak olacak olacak, seçtiğinizin sağınınının veya veya veya veya veya ve ve 1> Diğer tüm durumlarda, bir direği belirtmediğinizde, zincir beklediğiniz gibi bükülmeyebilir.
Priority
Bir karakterde çok sayıda kontrol aktif olduğunda, temel sistem tarafından çözülme sırası nihai oluşturulan poz üzerinde etkilidir.Bu değeri değiştirerek, kontrollerin tatmin edildiği sıralamayı belirleyin.Daha yüksek değerler daha yüksek önceliğe sahiptir ve daha yüksek öncelikli kontroller daha sonra çözülür, çünkü sonuçları diğer denetimlerönceki sonucunu geçebilir.Bir karakterde çok sayıda IK kontrolünüz var ve bunlardan biri diğerinden daha önemliyse, daha düşük bir öncelik belirtin.Varsayılan olarak 0'dur, yani tüm kontroller aynı önceliğe sahiptir.
SmoothTime
Bu değer, EndEffector için ulaşması gereken ortalama saniye sayısını belirtir Target.Davranış, kritik olarak yayınlanmış bir baharatın davranışıdır, nerede değişim oranı hedefe olan mesafeye orantılıdır ve hedefe yaklaşırken hiçbir dalgalanma mevcut değildir.Daha küçük değerler daha hızlı bir uyum sağlar ve daha büyük değerler daha yavaş bir uyum sağlar.0 değeri sertliği devre dışı bırakır.Varsayılan değer, hareketin gerçekçi hissetmesini sağlayan çok hafif bir yumuşatma sağlamak için 0.05'tir.
Target
The Target dünyada ulaşmak istediğiniz bir noktayı temsil eder ( CFrame ) EndEffector .Ulaşmanın kesin davranışı, Type özelliği aracılığıyla ayarlanabilir ve bunun üzerine bir ek Offset uygulanarak değiştirilebilir.Fiziğe veya bir senaryoya bağlı olarak taşınacak bir Target belirlediyseniz, her karede IKControl noktaya ulaşmaya çalışacak ve noktaya ulaşmak için otomatik olarak güncellenecektir.
Type 'yi değiştirerek, kontrolün davranışını değiştirebilirsiniz. Bunlar mevcut seçeneklerdir:
- Dönüştür: bu, bir tam 6-DoF sınırıdır. Class.IKControl.EndEffector|EndEffector``Datatype.CFrame``Class.IKControl.Target|Target 'e uyarlar.
- Pozisyon: EndEffector pozisyonunu Target pozisyonuna eşleştirir.
- Döndürme: EndEffector döndürmeyi Target 'ye uyarlar.
- Bakınız: tüm zinciri hareket ettirir veya yönlendirir ve bir eksen (varsayılan olarak ön eksen) EndEffector noktasında dünyada belirtilen bir konuma yerleştirir Target.
Weight
Bu özellik kullanarak, verilen bir kontrolün karakter pozunu ne ölçüde etkilediğini kontrol edebilirsiniz.Değerler [0, 1] aralığında olmalıdır.0 hiçbir etki demektir ve 1 IK kontrolünün tüm etkisini ifade eder.Bu aralığın dışındaki değerler kısaltılır.Bu değeri pürüzsüz bir şekilde değiştirmek, sarsıntılı hareketten kaçınmak için belirli bir kontrolü karıştırmanıza veya dışarıdan çıkarmanıza izin verir.Varsayılan olarak 1'dir.
Ağırlık, Son-Etkör ile IK hedefi arasındaki yerleştirme faktörünü belirler.Ağırlığı 0 olarak ayarlamak, IK Kontrolü devre dışı bırakmaz çünkü SmoothTime süzgeç faktörü ve Direk ve Pole dahil diğer faktörler hala pozları değiştirebilir.IK Kontrolünü gerçekten devre dışı bırakmak için, Enabled özelliğini yalan olarak dönüştürün.