IKControl

แสดงที่เลิกใช้งานแล้ว

*เนื้อหานี้แปลโดยใช้ AI (เวอร์ชัน Beta) และอาจมีข้อผิดพลาด หากต้องการดูหน้านี้เป็นภาษาอังกฤษ ให้คลิกที่นี่

IKControl ตัวอย่างจะสร้างท่าทางแอนิเมชันขั้นตอนโดยใช้กินามิกส์ย้อนกลับ (IK)พวกเขาช่วยให้คุณสามารถทำให้ตัวละครตอบสนองต่อสภาพแวดล้อมได้อย่างเป็นจริง

ตัวอย่างเช่น คุณสามารถทำให้ตัวละครวางมือบนจับประตูได้อย่างถูกต้องและตัวละครจะทำเช่นนั้นอย่างอิสระจากตำแหน่งของมันIKControls ให้ประโยชน์ในการต้องสร้างแอนิเมชันน้อยลงสําหรับเกมของคุณในขณะที่ให้ประสบการณ์ของคุณมีความจริงจังและเรียบง่ายมากขึ้น

จะต้องเป็นลูกของ หรือ ที่มีคุณสมบัติที่จำเป็นทั้งหมดถูกตั้งค่าอย่างถูกต้อง มิฉะนั้นพวกเขาจะไม่มีผลใดๆคุณสมบัติที่จำเป็นคือ Type , EndEffector , Target , ChainRoot .ทันทีที่พวกเขาถูกตั้งค่า IkControl จะปรับท่าทางของตัวละครของคุณตามที่คุณระบุตัวอย่างโค้ดต่อไปนี้แสดงวิธีการตั้งค่าครั้งแรกของคุณ IKControl และเริ่มต้นการสร้างภาพเคลื่อนไหวที่สมจริงมากขึ้นสำหรับเกมของคุณ

คุณสามารถใช้ IKControls เพื่อสร้างตัวละคร:

  • หมุนหัวและลําตัวเพื่อมองไปที่จุดสนใจในโลก
  • ปรับตำแหน่งเท้าเพื่อตอบสนองต่อสภาพแวดล้อมที่เปลี่ยนแปลงได้ ปรับขาและเท้าให้อยู่ในพื้นดินที่มีหินและที่ลาดชัน
  • ถือปืนและวางมือของมันอย่างเหมาะสมบนด้ามจับโดยไม่จำเป็นต้องสร้างแอนิเมชันสำหรับปืนแต่ละอันในเกม
  • เล็งไปที่จุดในโลกเพื่อให้ปลายปืนชี้ไปที่สิ่งที่คุณต้องการยิงอย่างแม่นยำ เป็นประโยชน์อย่างยิ่งในนักยิงมุมมองที่สาม
  • วางมือลงบนพวงมาลัยของรถและปฏิบัติตามเมื่อมันหมุน
  • อีกมากมาย!

IKControl จะเขียนทับแอนิเมชั่นสำหรับทุกส่วนระหว่าง ChainRoot และ EndEffector ไปคุณสามารถเปิดใช้งาน/ปิดใช้งานได้โดยใช้ Enabled หรือเปลี่ยนจํานวนที่พวกเขามีผลกระทบต่อแอนิเมชั่นพื้นฐานโดยใช้ Weightระวัง: หากคุณไม่ตั้งค่า IKControls ของคุณอย่างถูกต้อง คุณอาจสร้างท่าทางที่ไม่ดีและไม่สมจริง!

ตัวอย่างโค้ด

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

สรุป

คุณสมบัติ

  • อ่านพร้อมๆ กัน

    ส่วนสุดท้ายที่คุณสนใจในการย้ายตัวละครของคุณตัวอย่างเช่น แขนข้างบนต้องเป็นบรรพบุรุษของ EndEffector และเป็น BasePart หรือ Bone ในตัวละครของคุณ

  • อ่านพร้อมๆ กัน

    สลับการควบคุมเปิดและปิด เป็นค่าเริ่มต้นจริง

  • อ่านพร้อมๆ กัน

    ส่วนที่คุณสนใจย้ายไปถึง Target .ตัวอย่างเช่นมือของตัวละครของคุณต้องเป็นลูกหลานของ ChainRoot และเป็น BasePart หรือ Bone ในตัวละครของคุณ

  • อ่านพร้อมๆ กัน

    ค่าชดเชยเพิ่มเติมที่ใช้บนด้านบนของ EndEffector ในพื้นที่ท้องถิ่นเพื่อเปลี่ยนสถานที่ที่มันเคลื่อนที่

  • อ่านพร้อมๆ กัน

    ค่าชดเชยเพิ่มเติมที่ใช้บนด้านบนของ Target เพื่อเปลี่ยนสถานที่ที่ EndEffector เคลื่อนที่

  • อ่านพร้อมๆ กัน

    ตัวอย่างที่เลือกได้ที่กำหนดวิธีที่ลูกโซ่โค้ง คุณสามารถใช้สิ่งนี้เพื่อระบุวิธีที่ข้อศอกหรือเข่าโค้งได้

  • อ่านพร้อมๆ กัน

    ระบุลำดับที่การควบคุมจะได้รับการแก้ไข มูลค่าที่สูงกว่ามีลําดับความสําคัญสูงกว่า

  • อ่านพร้อมๆ กัน

    ระบุจํานวนวินาทีเฉลี่ยที่ใช้สําหรับ EndEffector ในการเข้าถึง Target ได้อย่างราบรื่น

  • อ่านพร้อมๆ กัน

    วัตถุที่ EndEffector ไปถึงหรือชี้ไปที่มันสามารถเป็นอะไรก็ได้ที่มีตำแหน่งในโลก เช่น BasePart , Attachment , Bone หรือ Motor6D .

  • อ่านพร้อมๆ กัน

    ระบุวิธีที่ตัวแก้ปัญหาตอบสนองการควบคุมนี้

  • อ่านพร้อมๆ กัน

    ระบุน้ำหนักของเป้าหมายการควบคุม IK ควรอยู่ในช่วง [0, 1]

คุณสมบัติ

ChainRoot

อ่านพร้อมๆ กัน

โดยการระบุ ChainRoot และ EndEffector คุณจะสั่งให้ IKControl ที่อนุญาตให้ย้ายและหมุนชิ้นส่วนทั้งหมดระหว่างสองเพื่อย้าย EndEffector ไปยัง Targetตัวอย่างเช่น หากคุณระบุ LeftHand เป็น EndEffector และ LeftUpperArm เป็น ChainRoot การควบคุมจะเคลื่อนไป 3 ส่วน: LeftHand, LeftLowerArm และ LeftUpperArmหลีกเลี่ยงการตั้งค่า ChainRoot เป็นรากของตัวละครที่แท้จริงเพราะจะผลิตผลลัพธ์ที่ไม่สมจริง

Enabled

อ่านพร้อมๆ กัน

คุณสมบัตินี้ช่วยให้คุณสามารถสลับการควบคุม IK เปิดและปิดได้มันเปิดใช้งานโดยปกติเมื่อ Enabled เป็นเท็จ การควบคุม IK จะปิดและไม่ได้รับการแก้ไขโดยโซลูเวอร์ระดับพื้นฐาน

EndEffector

อ่านพร้อมๆ กัน

ส่วนสุดท้ายในลำดับของตัวละครที่คุณต้องการส่งผลกระทบคือ EndEffectorตัวอย่างเช่น อาจเป็นมือเมื่อคุณต้องการย้ายแขนทั้งหมดเพื่อไปถึงจุดมันสามารถเป็น BasePart บนตัวละครที่มี Motor6D เป็นลูก Motor6D โดยตรง หรือ Bone หรือ Attachmentจุดศูนย์กลางของสิ่งที่เลือก EndEffector ย้ายไปที่ Target ดังนั้นคุณสามารถใช้ Attachments เพื่อปรับแต่งจุดใดของ BasePart ที่ควรไปถึง Target

EndEffectorOffset

อ่านพร้อมๆ กัน

ค่าออฟเซ็ตของเอฟเฟกต์สุดท้ายเป็นเพิ่มเติม CFrame ที่ใช้บนด้านบนของ Target ที่ผลิต CFrame ที่ใช้สำหรับวาง CFrame ซึ่งใช้สำหรับวาง EndEffectorโดยค่าเริ่มต้นเป็น CFrame ตัวตนดังนั้นหากคุณไม่ตั้งค่ามันจะไม่มีผลและ EndEffector ใช้ Target``Datatype.CFrame โดยตรงซึ่งระบุไว้ในพื้นที่ท้องถิ่นของ EndEffector

หรือคุณสามารถใช้สิ่งที่แนบมาโดยการตั้งค่าสิ่งที่แนบมาเป็น EndEffector ซึ่งจะย้ายไปที่ Target แทนที่จะเป็นชิ้นส่วนที่มันแนบมา ผลการค้นหา

คุณยังสามารถใช้ EndEffectorOffset เพื่อปรับแต่งซึ่งแกนของ EndEffector ควรชี้ไปที่ Target เมื่อใช้ LookAt เป็น Type

Offset

อ่านพร้อมๆ กัน

ค่าส่วนลบเป็นเพิ่มเติม CFrame ที่ใช้บนด้านบนของ Target ที่ผลิต CFrame ที่ใช้ในการวาง CFrame ซึ่งใช้ EndEffectorเป็นตัวตนเริ่มต้นดังนั้นหากคุณไม่ตั้งค่ามันจะไม่มีผลและ EndEffector จะใช้ Target``Datatype.CFrame โดยตรงคุณสามารถแอนิเมชั่นมันเพื่อสร้างแอนิเมชั่นขั้นตอนเช่นพิมพ์บนแป้นพิมพ์มันมีประโยชน์เมื่อ Target และ EndEffector ไม่สอดคล้องกันและคุณต้องแก้ไขด้วยการหมุนหรือแปลเพิ่มเติม

อ่านพร้อมๆ กัน

The Pole เป็นตัวเลือก Instance ที่ให้คุณควบคุมวิธีที่ชิ้นกลางในตัวละครของคุณควรโค้งมันสามารถเป็นอะไรก็ได้ที่มีตำแหน่งในโลก เช่น BasePart , Attachment , Bone , Motor6D .โดยค่าเริ่มต้นคือ nilเมื่อคุณระบุ ตัวแก้ไขระดับพื้นฐานจะทำให้ชิ้นส่วนโค้งไปทางมันเมื่อมันเป็น nil ผู้แก้ปัญหาจะพยายามทำให้ข้อศอกและเข่าโค้งอย่างเหมาะสมตามข้อจำกัดของตัวละครส่วนจะเป็น "แขน" เมื่อคุณเลือกเป็น ทั้ง มือซ้าย หรือ มือขวา และเป็น ขาที่เหมาะสม หรือ ขาขวา และจะเป็น "ขา" เมื่อคุณเลือกเป็น ทั้ง เท้าซ้าย หรือ เท้าขวา และจะเป็น "ขา" เมื่อคุณเลือกเป็น ทั้ง ขาซ้าย หรือ ขาขวา ในกรณีอื่น ๆ ทั้งหมด หากคุณไม่ระบุเสา โซ่อาจไม่โค้งตามที่คุณคาดไว้

Priority

อ่านพร้อมๆ กัน

เมื่อมีการควบคุมหลายอย่างใช้งานบนตัวละคร ลำดับที่พวกเขาถูกแก้ไขโดยระบบพื้นฐานจะมีผลต่อท่าทางสุดท้ายที่สร้างขึ้นโดยการเปลี่ยนค่านี้คุณจะระบุลำดับการสั่งซื้อที่ควบคุมพอใจมูลค่าที่สูงกว่ามีลําดับความสําคัญสูงกว่า และการควบคุมที่มีลําดับความสําคัญสูงกว่าจะได้รับการแก้ไขในภายหลังเนื่องจากผลลัพธ์ของพวกเขาอาจล้ำหน้าผลลัพธ์ก่อนหน้าของการควบคุมอื่นหากคุณมีการควบคุม IK หลายรายการบนตัวละครและหนึ่งรายการสำคัญกว่าอีก ให้ระบุลําดับความสําคัญที่ต่ํากว่าสําหรับมันค่าเริ่มต้นคือ 0 หมายความว่าการควบคุมทั้งหมดมีลําดับความสําคัญเดียวกัน

SmoothTime

อ่านพร้อมๆ กัน

ค่านี้ระบุจํานวนเฉลี่ยของวินาทีที่ใช้สําหรับ EndEffector ในการไปถึง Targetพฤติกรรมคือของสปริงที่ถูกดันอย่างรุนแรงซึ่งอัตราการเปลี่ยนแปลงสัดส่วนกับระยะห่างไปยังเป้าหมายและไม่มีการสั่นสะเทือนเมื่อใกล้เป้าหมายมูลค่าที่เล็กกว่าสร้างการผสานเร็วขึ้นและมูลค่าที่ใหญ่กว่าสร้างการผสานช้าลงค่า 0 ปิดการบูรณะค่าเริ่มต้นคือ 0.05 เพื่อให้การสะบัดราบรื่นเล็กน้อยที่ทำให้การเคลื่อนไหวรู้สึกเป็นจริง

Target

อ่านพร้อมๆ กัน

The Target เป็นจุด ( CFrame ) ในโลกที่คุณต้องการให้ EndEffector ไปถึงพฤติกรรมที่แน่นอนของการเข้าถึงสามารถตั้งค่าผ่านคุณสมบัติ Type และสามารถใช้เพิ่มเติม Offset เพื่อแก้ไขมันได้หากคุณตั้งค่า Target ที่จะถูกย้ายไปทางกายภาพหรือสคริปต์ในแต่ละเฟรม IKControl จะพยายามทำให้พอใจโดยอัตโนมัติและอัปเดตจุดที่จะไปถึง

อ่านพร้อมๆ กัน

โดยการเปลี่ยน Type คุณสามารถเปลี่ยนพฤติกรรมของการควบคุม นี่คือตัวเลือกที่มีอยู่:

  • เปลี่ยน: มันเป็นข้อจำกัด 6-DoF เต็ม จัดให้ EndEffector``Datatype.CFrame สอดคล้องกับของ Target
  • ตําแหน่ง: จัดตําแหน่ง EndEffector ให้ตรงกับตําแหน่ง Target
  • การหมุน: จัดให้การหมุน EndEffector สอดคล้องกับของ Target
  • มองไปที่: ย้ายและจัดทิศทางทั้งหมดของลูกโซ่เพื่อสร้างแกน (โดยค่าเริ่มต้นคือแกนด้านหน้า) ในจุด EndEffector ในโลกที่ระบุโดย Target

Weight

อ่านพร้อมๆ กัน

คุณสามารถควบคุมได้ว่าการควบคุมใดจะส่งผลต่อท่าทางของตัวละครมากแค่ไหนโดยใช้คุณสมบัตินี้ค่าควรอยู่ในช่วง [0, 1]0 หมายถึงไม่มีผล และ 1 หมายถึงผลเต็มของการควบคุม IKค่านอกช่วงนี้ถูกตัดทิ้งการเปลี่ยนแปลงค่านี้อย่างราบรื่นช่วยให้คุณสามารถผสมผสานการควบคุมเฉพาะเพื่อหลีกเลี่ยงการเคลื่อนไหวที่กระทบกระเทือนมันเป็น 1 โดยค่าเริ่มต้น

น้ำหนักกำหนดตัวคูณการคำนวณระหว่างตัวกระตุ้นสิ้นสุดและเป้าหมาย IKการตั้งค่าน้ำหนักเป็น 0 ไม่ได้ปิดใช้งานการควบคุม IK เพราะปัจจัยอื่นๆ รวมถึงตัวเร่ง SmoothTime และเสายังสามารถเปลี่ยนท่าทางได้เพื่อปิดใช้งานการควบคุม IK อย่างแท้จริง เปลี่ยนคุณสมบัติ Enabled เป็น false

วิธีการ

GetChainCount


ส่งค่ากลับ

GetChainLength


ส่งค่ากลับ

GetNodeLocalCFrame

พารามิเตอร์

index: number
ค่าเริ่มต้น: ""

ส่งค่ากลับ

GetNodeWorldCFrame

พารามิเตอร์

index: number
ค่าเริ่มต้น: ""

ส่งค่ากลับ

GetRawFinalTarget


ส่งค่ากลับ

GetSmoothedFinalTarget


ส่งค่ากลับ

อีเวนต์