ตัวแก้ไขกราฟอนิเมชัน

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

ตัวแก้ไขกราฟอนิเมชัน เป็นเครื่องมือแบบมองเห็นได้ที่ใช้โหนด ซึ่งช่วยให้นักศิลปะทางเทคนิคและนักสร้างอนิเมชันสามารถสร้างตรรกะอนิเมชันที่ซับซ้อนได้โดยตรงภายใน Roblox Studio โดยให้อินเทอร์เฟซที่เรียบง่ายสำหรับการสร้างพฤติกรรมเช่นต้นไม้ผสม ช่วยให้สามารถลดการพึ่งพาการเขียนสคริปต์แบบแมนนวลสำหรับการเคลื่อนไหวของตัวละครได้

ระบบนี้ทำงานร่วมกับกระแสงานอนิเมชันที่มีอยู่ของคุณ:

  • ตัวแก้ไขอนิเมชัน: ใช้ ตัวแก้ไขอนิเมชัน เป็นเครื่องมือหลักในการเขียนคลิปส่วนบุคคลและปรับแต่งคีย์เฟรมและเส้นโค้ง
  • ตัวแก้ไขกราฟอนิเมชัน: ใช้พื้นที่ทำงานใหม่เพื่อใช้คลิปเหล่านั้นและจัดระเบียบลงในต้นไม้ตรรกะเพื่อขับเคลื่อนพฤติกรรมการเล่นเกมที่ซับซ้อน

ออกแบบมาเพื่อเพิ่มความร่วมมือ กราฟที่มองเห็นได้ช่วยให้นักพัฒนาตรวจสอบแก้ไขข้อบกพร่องและทำความเข้าใจตรรกะที่สร้างโดยนักสร้างอนิเมชันได้อย่างรวดเร็ว ขณะที่ศิลปินมุ่งเน้นไปที่การปรับแต่งการเคลื่อนไหวเชิงโต้ตอบ นักพัฒนาสามารถเข้าถึงโหนดกราฟอนิเมชันได้โดยตรงเพื่อควบคุมอนิเมชันที่ผสมผสานและสถานะต่างๆ

สร้างกราฟ


ในการเริ่มสร้างตรรกะสำหรับตัวละครที่สามารถอนิเมทได้ เข้าถึงตัวแก้ไขกราฟอนิเมชันผ่านแท็บ Avatar ในแถบเครื่องมือของ Studio ขั้นตอนต่อไปนี้แสดงวิธีการเริ่มต้นการตั้งค่าโครงกระดูกและสร้างเครือข่ายโหนดพื้นฐานโดยใช้อนิเมชันการเดินและการโบกมือเริ่มต้น

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

ในการสร้างกราฟอนิเมชันของคุณเอง คล้ายกับตัวอย่างพื้นฐานที่ให้ในเอกสารอ้างอิง ใช้ขั้นตอนต่อไปนี้:

  1. ใน Studio ให้เพิ่มโครงกระดูกที่สามารถอนิเมทได้ โดยการนำทางไปที่แท็บ Avatar และเลือก CharacterMy Avatar.

    ปุ่มตัวละครไฮไลต์ในแถบเครื่องมือของ Studio.
  2. เปิดตัวแก้ไขกราฟอนิเมชันโดยการนำทางไปที่ Graph Editor ในแท็บ Avatar.

    ตัวแก้ไขกราฟอนิเมชันปรากฏในแถบเครื่องมือของ Studio.
  3. เลือกโครงกระดูกที่สามารถอนิเมทได้ในมุมมอง 3D แล้วเลือก Create Graph.

  4. ในตัวแก้ไขกราฟ คลิกขวาแล้วเลือก Clip.

    รายการโหนดในเมนูคลิกขวา
  5. ในโหนด Clip ใหม่ตั้งค่า Animation ID.

    1. เลือกเมนูดรอปดาวน์ Animation ID.

    2. เพื่อส่ง ID ของสินทรัพย์อนิเมชันเฉพาะ ให้คลิก Import.

      แสดงฟิลด์ในโมดูลนำเข้าอนิเมชันเพื่อเพิ่ม Animation ID
    3. ในฟิลด์ Animation ID ให้เพิ่มอนิเมชันการเดินเริ่มต้น: 507777826.

    4. เลือก Import.

  6. เพิ่มโหนดคลิปอีกตัวโดยทำซ้ำขั้นตอน 4-5 โดยใช้อนิเมชันการโบกมือเริ่มต้น: 507770239.

    โหนดคลิปสองตัวที่มี Animation ID ที่กรอกข้อมูลแล้ว
  7. ในตัวแก้ไขกราฟ คลิกขวาและเลือก Add.

    เพิ่มโหนด
  8. เชื่อมต่อโหนด Clip กับโหนด Add โดยการลากตัวเชื่อมต่อผลลัพธ์มุมขวาสูงไปยังพอร์ตที่เหมาะสม:

    1. เชื่อมต่อโหนด Clip ที่มีอนิเมชันการเดินเข้ากับพอร์ต Base.
    2. เชื่อมต่อโหนด Clip ที่มีอนิเมชันการโบกมือเข้ากับพอร์ต Additive.
    โหนดคลิปทั้งหมดเชื่อมต่อกับโหนดเพิ่ม
  9. จากโหนด Add เชื่อมต่อตัวเชื่อมต่อผลลัพธ์มุมขวาสูงไปยังพอร์ต Pose ของกราฟ output.

    โหนดทั้งหมดเชื่อมต่อกับโหนดผลลัพธ์สุดท้าย
  10. (ไม่บังคับ) กำหนดพารามิเตอร์ให้กับตัวแปร Speed ของคุณ

    1. คลิกและลากพอร์ต Speed สีเขียวไปยังพื้นที่ว่าง พารามิเตอร์โหนดใหม่จะแสดงขึ้น

      คลิกและลากตัวเชื่อมต่อจากพอร์ต Speed ของโหนด Clip.
    2. ในมุมซ้ายบนของตัวแก้ไขกราฟ ใช้พาเนลพารามิเตอร์เพื่อปรับเปลี่ยนพารามิเตอร์ในโหนดของคุณได้อย่างรวดเร็ว คุณยังสามารถเข้าถึงได้ โปรแกรมmatically.

      พาเนลพารามิเตอร์ โหนดพารามิเตอร์ และโหนดคลิปที่แสดงค่าใช้ร่วมกัน.
  11. ทดสอบอนิเมชันโดยกด ปุ่มเล่น.

    ไอคอนปุ่มเล่นสำหรับการพรีวิวอนิเมชัน
  12. ลองทดสอบน้ำหนัก ความเร็ว โหมดเล่นและอนิเมชันอื่นๆ สำหรับข้อมูลเพิ่มเติมเกี่ยวกับโหนดแต่ละตัว ดูที่ เอกสารอ้างอิงโหนด.

การบูรณาการ API

การสร้างและใช้งานกราฟอนิเมชันตามมาตรฐานของท่ออนิเมชันของ Roblox หลังจากเลือกโครงกระดูกในตัวแก้ไขกราฟอนิเมชัน จะมีการสร้างสินทรัพย์ใหม่ชื่อ AnimationGraphDefinition สินทรัพย์นี้ทำหน้าที่เป็นที่เก็บสำหรับโหนด การเชื่อมต่อ และพารามิเตอร์ของคุณ เมื่อตรรกะของคุณเสร็จสิ้น คุณจะเผยแพร่กราฟเพื่อรับ Asset ID มาตรฐาน

ในสคริปต์ของคุณ คุณสามารถโต้ตอบกับกราฟเหล่านี้ได้โดยการโหลดไปยัง Animator เหมือนการใช้งานอนิเมชันทั่วไป เพื่อตอบสนองต่อตรรกะภายในของกราฟ ใช้ AnimationTrack:SetParameter() เพื่อส่งค่าแบบเรียลไทม์ เช่น ความเร็วในการเคลื่อนไหวหรือตัวแปรสถานะต่างๆ ไปยังตัวแปรของกราฟโดยตรง


local animation = Instance.new("Animation")
animation.AnimationId = "rbxassetid://123456789" -- ID ของกราฟที่คุณเผยแพร่
local animationTrack = animator:LoadAnimation(animation)
animationTrack:Play()
-- การอัปเดตพารามิเตอร์แบบไดนามิกผ่าน RunService
game:GetService("RunService").Stepped:Connect(function(_, dt)
local currentSpeed = humanoidRootPart.AssemblyLinearVelocity.Magnitude
animationTrack:SetParameter("humanoidSpeed", currentSpeed)
end)

เอกสารอ้างอิงโหนด

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

แต่ละส่วนของโหนดจะรวมถึง:

  • คำนิยาม – สรุปจุดประสงค์และบทบาทของโหนดภายในกราฟ
  • ข้อมูลนำเข้า – กระแสข้อมูลที่เข้ามายังโหนด หลายการนำเข้าจะแสดงเป็น Input1, Input2, ..., InputN
  • คุณสมบัติของข้อมูลนำเข้า – การตั้งค่าที่เชื่อมโยงกับข้อมูลนำเข้าที่เฉพาะเจาะจง (ตัวอย่างเช่น ข้อมูล Idle ที่กำหนดให้กับตำแหน่งของ 0.5 บนโหนด Blend1D)
  • ข้อมูลเหตุการณ์ – เหตุการณ์ที่เกิดขึ้นหรือถูกบริโภคโดยโหนดเพื่อตอบสนองต่อตรรกะกราฟภายในหรือสคริปต์ Luau ภายนอก สิ่งนี้อาจเปลี่ยนแปลงไปในระหว่างการพัฒนาเบต้า

กฎเหตุการณ์ทั่วโลก

สำหรับโหนดทั้งหมดและ การเปลี่ยนผ่าน กฎด้านล่างจะใช้ตามค่าเริ่มต้น:

  • เหตุการณ์จะเกิดขึ้นจากโหนดต้นทางขึ้นไปยังกราฟ ทุกเหตุการณ์จะมีน้ำหนักเป็นตัวแทนของอิทธิพลของต้นทางในผสมสุดท้าย หากน้ำหนักถึงศูนย์ที่จุดใดจุดหนึ่ง เหตุการณ์จะถูกปิดเสียง
  • โหนดที่ไม่มีตรรกะเหตุการณ์ที่กำหนดเองจะส่งผ่านเหตุการณ์ทั้งหมดโดยไม่มีการเปลี่ยนแปลง; โหนดที่ผสมผสานหรือเลือกจากการนำเข้าต่างๆ อาจลดขนาดน้ำหนักหรือลบเหตุการณ์จากการนำเข้าที่ไม่ใช่หลัก (ดูส่วนเหตุการณ์ต่อโหนด)
  • เหตุการณ์ Marker ที่ถึงยอดกราฟสามารถสังเกตได้ผ่าน AnimationTrack:GetMarkerReachedSignal()

Clip

โหนด Clip

อ้างอิงถึงสินทรัพย์ AnimationClip ซึ่งทำหน้าที่เป็นโหนดใบในกราฟ สร้างข้อมูลอนิเมชันดิบที่ป้อนเข้าไปยังโหนดอื่นสำหรับการผสม การเลือก หรือการแก้ไข

ข้อมูลนำเข้า
  • ไม่มี
คุณสมบัติ
คุณสมบัติประเภทคำอธิบาย
ClipAsset IDสินทรัพย์อนิเมชันที่เล่น (เช่น rbxassetid://12345).
PlayModeEnum.AnimationNodePlayMode

กำหนดพฤติกรรมของคลิปเมื่อมันถึงจุดสิ้นสุดของระยะเวลา

  • Loop (ค่าเริ่มต้น): เริ่มต้นใหม่อัตโนมัติจากจุดเริ่มต้นเมื่อคลิปเสร็จสิ้น
  • PingPong: เล่นจากเริ่มต้นไปยังสิ้นสุด จากนั้นเล่นย้อนกลับจากสิ้นสุดไปยังเริ่มต้นทันที
  • OnceAndHold: เล่นครั้งเดียวและรักษาท่าทางสุดท้ายไว้เมื่อเสร็จสิ้น
  • OnceAndReset: เล่นครั้งเดียวและกลับไปยังท่าทางเริ่มต้นเมื่อเสร็จสิ้น
ReverseBooleanควบคุมทิศทางของการเล่น
Speedหมายเลขตัวคูณสำหรับอัตราการเล่น 0.0 จะหยุดกราฟ 1.0 คือความเร็วปกติ และ 2.0 คือความเร็วสองเท่า
TrimBooleanเปิด/ปิดว่าความยาวของคลิปจะถูกตัดหรือไม่
TrimStartหมายเลขเวลาแน่นอน (ในวินาที) ที่การเล่นควรเริ่มต้น
TrimEndหมายเลขเวลาแน่นอน (ในวินาที) ที่การเล่นควรสิ้นสุด
ข้อมูลเหตุการณ์
  • การจัดการเหตุการณ์: ไม่มี นี่คือโหนดใบที่ไม่มีลูก
  • การปล่อยเหตุการณ์: อ่านมาร์กเกอร์ที่กำหนดเองที่ฝังอยู่ในคลิปอนิเมชัน (เช่น "การเหยียบเท้า", "การแกว่งอาวุธ") และปล่อยออกมาเป็นเหตุการณ์ที่ตั้งชื่อในเฟรมที่เกิดขึ้นอย่างแม่นยำ หากคลิปถูกตัด จะมีการปล่อยเฉพาะมาร์กเกอร์ที่อยู่ภายในช่วงที่กำหนด [TrimStart, TrimEnd] (รวม) เท่านั้น

Select

โหนด Select

เลือกระหว่างการนำเข้าที่มีอยู่หลายๆ รายการผ่านคุณสมบัติ Selection ทุกครั้งที่การเลือก текущего หมายถึงการเปลี่ยนผ่านใหม่ transition.

ข้อมูลนำเข้า
  • Input1...InputN
คุณสมบัติ
คุณสมบัติประเภทคำอธิบาย
SelectionStringID เฉพาะของข้อมูลนำเข้าที่จะเลือก ซึ่งตรงกับชื่อของการเชื่อมต่อข้อมูลนำเข้า (เช่น "Walk")
ข้อมูลเหตุการณ์
  • การจัดการเหตุการณ์: เหตุการณ์จากการนำเข้าที่เลือกจะส่งผ่านไปโดยที่น้ำหนักไม่ถูกเปลี่ยนแปลง
  • การปล่อยเหตุการณ์: จะผ่านเหตุการณ์ทั้งหมดจากการนำเข้าที่เลือก โดยในระหว่างการเปลี่ยนผ่าน การปล่อยเหตุการณ์ทำตาม กฎเหตุการณ์ทั่วโลก.

PrioritySelect

โหนด Priority Select

ประเมินรายการของการเชื่อมต่อเข้าจากบนลงล่างและเล่นครั้งแรกที่เงื่อนไขของมันประเมินเป็นจริง เงื่อนไขนี้ช่วยให้การเลือกอนิเมชันแบบลำดับชั้นขึ้นอยู่กับตรรกะเฉพาะ ทุกครั้งที่การเลือกในขณะนี้เปลี่ยน จะมีการเรียกใช้ Transition ใหม่

ข้อมูลนำเข้า
  • Input1...InputN
    • Trigger (Boolean): เงื่อนไขเชิงตรรกะที่ต้องเป็นจริงเพื่อให้ข้อมูลนี้เปิดใช้งาน ในรุ่นปัจจุบัน เงื่อนไขนี้เชื่อมโยงกับพารามิเตอร์ boolean.
    • Interruptible (Enum.AnimationNodeInterruptible): กำหนดกฎที่ระบุเมื่ออนิเมชันนี้สามารถถูกขัดจังหวะโดยการนำเข้าสูงกว่าได้
      • Always (ค่าเริ่มต้น): สามารถขัดจังหวะการส่งข้อมูลนี้ได้ทุกเมื่อโดยตามเงื่อนไขที่สูงกว่า
      • Finished: อนิเมชันทั้งหมดต้องเสร็จก่อนที่จะให้ข้อมูลที่มีลำดับสูงกว่า
      • Trigger: เงื่อนไขนี้จะถูกขัดจังหวะได้เฉพาะเมื่อ InterruptibleTrigger ตั้งค่าเป็น true
    • InterruptibleTrigger (Boolean): ใช้ได้เฉพาะเมื่อ Interruptible ตั้งค่าเป็น Trigger เงื่อนไขนี้สามารถขัดจังหวะได้เมื่อตรงตามการแสดงออกเฉพาะนี้
คุณสมบัติ
คุณสมบัติประเภทคำอธิบาย
DefaultInterruptibleEnum.AnimationNodeInterruptibleกฎพื้นฐานในการขัดจังหวะที่ใช้กับการนำเข้าส่วนใหญ่ การนำเข้าสามารถแทนที่กฎนี้ด้วยคุณสมบัติ Interruptible ของตนเอง
DefaultInterruptibleTriggerBooleanค่าพื้นฐานที่ใช้เมื่อโหมด Interruptible ที่แก้ไขจะอยู่ใน Trigger การนำเข้าสามารถแทนที่ค่าตั้งต้นนี้ด้วยคุณสมบัติ InterruptibleTrigger ของตนเอง
ข้อมูลเหตุการณ์
  • การจัดการเหตุการณ์: เหตุการณ์จากการนำเข้าที่เลือกจะส่งผ่านไปโดยที่น้ำหนักไม่ถูกเปลี่ยนแปลง
  • การปล่อยเหตุการณ์: จะผ่านเหตุการณ์ทั้งหมดจากการนำเข้าที่เลือก โดยในระหว่างการเปลี่ยนผ่าน การปล่อยเหตุการณ์ทำตาม กฎเหตุการณ์ทั่วโลก.

Sequence

โหนด Sequence

ใช้งานการนำเข้าเชื่อมต่อในลำดับที่กำหนดบนพื้นฐานเงื่อนไขในการรอเพื่อเลื่อนไปยังการนำเข้าถัดไปทุกครั้งที่การเลือกก่อให้เกิด transition.

ข้อมูลนำเข้า
  • Input1...InputN
    • WaitFor (Enum.AnimationNodeWaitFor): ระบุเงื่อนไขที่ต้องพบก่อนที่ลำดับจะไปยังการนำเข้าถัดไป
      • Finished (ค่าเริ่มต้น): เลื่อนจุดไปการนำเข้าถัดไปเมื่อข้อมูลที่กำลังทำงานในปัจจุบันเสร็จสิ้นรอบ เราเรียนรู้พฤติกรรมการก้าวไปข้างหน้า
        • Play-once clip: เลื่อนที่หลังจากคลิปสิ้นสุด.
        • Looping clip: เลื่อนหลังจากคลิปเต็มรอบ.
        • Sequence with infinite loops: เลื่อนหลังจากผ่านการรอบเต็มการเลือกรูปแบบที่ถูกจัดลำดับ.
        • Sequence with finite loops: เลื่อนหลังจากรอบทั้งหมดเสร็จสิ้น.
      • Trigger: เปิดใช้งานการนำเข้าถัดไปเมื่อการแสดงออกตรรกะเฉพาะประเมินเป็นจริง
    • WaitForTrigger (Boolean): ใช้ได้เฉพาะเมื่อ WaitFor ตั้งค่าเป็น Trigger.
คุณสมบัติ
คุณสมบัติประเภทคำอธิบาย
LoopCountหมายเลขจำนวนครั้งที่ลูปไปยังลำดับทั้งหมด (ค่าเริ่มต้นคือ 1) ค่าของ 0 ระบุว่าลูปไม่มีที่สิ้นสุด เมื่อถึงจำนวนที่กำหนด โหนดจะเคารพในการเคลื่อนตัวหรือการตั้งค่าการถือรับของการนำเข้าที่สุดท้าย
DefaultWaitForEnum.AnimationNodeWaitForเงื่อนไขการรอพื้นฐานที่ใช้กับการนำเข้าส่วนใหญ่ การนำเข้าสามารถแทนที่กฎนี้ด้วยคุณสมบัติ WaitFor ของตนเอง
ข้อมูลเหตุการณ์
  • การจัดการเหตุการณ์: เหตุการณ์จากการนำเข้าที่กำลังทำงานจะผ่านไปด้วยน้ำหนักที่ไม่เปลี่ยนแปลง
  • การปล่อยเหตุการณ์: จะผ่านเหตุการณ์ทั้งหมดจากการนำเข้าที่กำลังทำงานในลำดับนี้เท่านั้น ในระหว่างการเปลี่ยนผ่าน การปล่อยเหตุการณ์ทำตาม กฎเหตุการณ์ทั่วโลก.

RandomSequence

โหนด Random Sequence

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

ข้อมูลนำเข้า
  • Input1...InputN
    • Weight (หมายเลข): กำหนดความแค่หลักของการถูกเลือกของการนำเข้าที่ระบุ; น้ำหนักที่สูงขึ้นจะเพิ่มโอกาสในการถูกเลือก
คุณสมบัติ
คุณสมบัติประเภทคำอธิบาย
PlayCountหมายเลขจำนวนรายการที่โหนดจะเล่นก่อนที่จะหยุด เมื่อถึงจำนวนที่กำหนด โหนดจะเคารพการเคลื่อนตัวหรือการตั้งค่าการถือรับของการนำเข้าที่สุดท้าย ค่าเริ่มต้นคือ 0 สำหรับลูปไม่มีที่สิ้นสุด
Seedหมายเลขค่าที่ใช้ในการเริ่มต้นมาตรฐานสำหรับการสุ่ม (RNG) เพื่อให้ลำดับมีความสอดคล้องกันในลูกค้าต่างๆ ค่าเริ่มต้นคือ -1 สำหรับการสุ่มเมล็ด
ข้อมูลเหตุการณ์
  • การจัดการเหตุการณ์: เหตุการณ์จากการนำเข้าที่กำลังทำงานจะผ่านไปด้วยน้ำหนักที่ไม่เปลี่ยนแปลง
  • การปล่อยเหตุการณ์: จะผ่านเหตุการณ์ทั้งหมดจากการนำเข้าที่กำลังทำงานในลำดับนี้เท่านั้น ในระหว่างการเปลี่ยนผ่าน การปล่อยเหตุการณ์ทำตาม กฎเหตุการณ์ทั่วโลก.

Over

โหนด Over

เลเยอร์ท่าทาง Over ทับท่าทางพื้นฐาน เมื่อต้องรวมกับโหนด Mask ข้อต่อที่ถูกมาสก์ในท่าทาง Over จะเปิดเผยท่าทาง Base อย่างสมบูรณ์ ทำให้เกิดเอฟเฟกต์ overlay ที่โปร่งใส

ข้อมูลนำเข้า
  • Base: ชั้นพื้นหลังหรือล่าง โดยปกติจะเป็นอนิเมชันเต็มตัวเช่นการเคลื่อนที่หรือสถานะนิ่ง
  • Over: ชั้นนำหน้าหรือบนที่จะนำไปใช้เหนือพื้นฐานเช่น อนิเมชันการทำท่าทางด้วยมือหรือการใช้เครื่องมือ
คุณสมบัติ
คุณสมบัติประเภทคำอธิบาย
Weightหมายเลขน้ำหนักการผสมที่ใช้เพื่อลดท่าทาง Over ค่าเริ่มต้นคือ 1.0 (การแทนที่เต็มรูปแบบ) และไม่มีการจำกัด
ข้อมูลเหตุการณ์
  • การจัดการเหตุการณ์:
    • โหนดจะฟังเหตุการณ์จากทั้งข้อมูลนำเข้า Base และ Over
  • การปล่อยเหตุการณ์:
    • เหตุการณ์พื้นฐาน: เหตุการณ์ทั้งหมดจากข้อมูลนำเข้า Base จะถูกส่งผ่านโดยไม่มีการเปลี่ยนแปลง
    • เหตุการณ์ Over: เหตุการณ์จากข้อมูลนำเข้า Over จะถูกปรับขนาดตามคุณสมบัติ Weight
      • เมื่อ Weight เท่ากับ 0.5 เหตุการณ์ Over จะถูกส่งผ่านที่ครึ่งน้ำหนัก
      • เมื่อ Weight เท่ากับ 0 เหตุการณ์จะถูกปิดเสียง

Add

โหนด Add

เพิ่มท่าทาง Additive เข้ากับท่าทาง Base ที่ลดทอนด้วย Weight เฉพาะ (ไม่มีการจำกัด)

ข้อมูลนำเข้า
  • Base: ท่าทางอนิเมชันหลัก
  • Additive: ท่าทางที่จะถูกสำหรับในท่าทางพื้นฐาน
คุณสมบัติ
คุณสมบัติประเภทคำอธิบาย
Weightหมายเลขกำหนดความแข็งแกร่งของท่าทางที่เพิ่มขึ้นที่นำไปใช้กับพื้นฐาน
ข้อมูลเหตุการณ์
  • การจัดการเหตุการณ์: โหนดจะฟังเหตุการณ์จากทั้งข้อมูลนำเข้า Base และ Additive
  • การปล่อยเหตุการณ์: เหตุการณ์ทั้งหมดจากทั้งข้อมูลนำเข้า Base และ Additive จะถูกส่งผ่านโดยไม่มีการเปลี่ยนแปลง

Subtract

โหนด Subtract

เปลี่ยนอนิเมชันให้เป็นท่าทางที่เพิ่มขึ้นโดยการลบท่าทางพื้นฐานที่สัมพันธ์จากท่าทางเป้าหมาย (ABA - B). ผลลัพธ์จะลดขนาดด้วย Weight เฉพาะ (ไม่มีการจำกัด)

ข้อมูลนำเข้า
  • A: ท่าทางอนิเมชันเป้าหมาย
  • B: ท่าทางพื้นฐานที่สัมพันธ์ที่จะถูกหักออก
คุณสมบัติ
คุณสมบัติประเภทคำอธิบาย
Weightหมายเลขกำหนดความแข็งแกร่งของผลกระทบการหักออกที่นำไปใช้กับผลลัพธ์
ข้อมูลเหตุการณ์
  • การจัดการเหตุการณ์: โหนดจะฟังเหตุการณ์จากทั้ง Input A และ Input B
  • การปล่อยเหตุการณ์: เหตุการณ์ทั้งหมดจากทั้ง Input A และ Input B จะถูกส่งผ่านโดยไม่มีการเปลี่ยนแปลง

Blend1D

โหนด Blend1D

การเข้าสัมพันธ์ระหว่างท่าทางอนิเมชันสองท่าที่ใกล้เคียงที่สุดตามการนำเข้าตำแหน่งปัจจุบันบนแกนเดียว

ข้อมูลนำเข้า
  • Input1...InputN
    • Position (หมายเลข): พิกัดเฉพาะสำหรับการนำเข้ามากมายบนแกนผสม
คุณสมบัติ
คุณสมบัติประเภทคำอธิบาย
Positionหมายเลขค่าปัจจุบันที่ใช้งานบนแกนผสมที่ใช้เพื่อรวบรวมอนิเมชัน หาก Position อยู่ภายนอกช่วงของตำแหน่งดังกล่าว โหนดจะเก็บไว้โดยการประมาณใช้สองค่าใกล้เคียงที่สุด
PhaseSyncEnum.AnimationNodePhaseSync

กำหนดให้เวลาในการทำงานของโหนดลูกถูกซิงค์หรือไม่

  • Synced (ค่าเริ่มต้น): การซิงโครไนซ์ที่เป็นมาตรฐาน โหนดจะคำนวณ "ระยะเวลาที่เสมือนจริง" ตามค่าเฉลี่ยที่มีน้ำหนักของการใช้งานอยู่ ขนาดที่ทำงานของโหนดแต่ละตัวจะถูกปรับเพื่อให้ลูกทั้งหมดไปถึงช่วงเวลาเดียวกัน ทำให้อนิเมชันที่มีความยาวแตกต่างกันทำงานตามกันอย่างละเอียด
  • Unsynced: การผสมมาตรฐานที่แสดงว่าแต่คลิปนั้นสามารถก้าวล้ำได้ตามอัตราการเล่น
ข้อมูลเหตุการณ์
  • การจัดการเหตุการณ์: โหนดจะฟังเหตุการณ์จากโหนดลูกที่ทำงานอยู่ทั้งหมด
  • การปล่อยเหตุการณ์: เฉพาะเหตุการณ์จากการนำเข้าแรกที่มีน้ำหนักสูงสุดจะถูกส่งผ่าน จะถูกปรับตามน้ำหนักผสม ของเหตุการณ์จากการนำเข้าสำรองจะถูกปิดเสียง

Blend2D

โหนด Blend2D

ผสมระหว่างท่าทางอนิเมชันหลายท่าจากสองพารามิเตอร์ภายในพื้นที่พิกัด 2D มันช่วยให้สามารถสร้างกราฟที่ซับซ้อนจากการเคลื่อนไหวที่เกิดขึ้นได้

ข้อมูลนำเข้า
  • Input1...InputN
    • X (หมายเลข): พิกัด X สำหรับการนำเข้าสุดท้าย ทั้งหมด
    • Y (หมายเลข): พิกัด Y สำหรับการนำเข้าสุดท้าย ทั้งหมด
คุณสมบัติ
คุณสมบัติประเภทคำอธิบาย
InputModeEnum.AnimationNodeBlend2DInputMode

กำหนดระบบพิกัดที่ใช้ในการประเมินพื้นที่ผสม:

  • Cartesian (ค่าเริ่มต้น): ใช้พิกัดกริด 2D มาตรฐาน X และ Y แสดงถึงตำแหน่งปัจจุบันในพื้นที่ผสม
  • Polar: ใช้ค่ามุมและขนาด X แสดงถึงทิศทางในเรเดียน ขณะที่ Y แสดงถึงขนาดหรือความเข้มของการเคลื่อนไหว ทิศทางมีน้ำหนักมากกว่าขนาด การรวมกันจึงพิจารณาทิศทางมากกว่าความเข้ม ทำให้การเข้าใกล้ที่มีมุมใกล้เคียงกันแต่มีขนาดต่างกันผสมกันได้อย่างราบรื่นกว่าทิศทางที่แตกต่างกัน
Xหมายเลขค่าปัจจุบันของพิกัด X (Cartesian) หรือทิศทางในเรเดียน (Polar)
Yหมายเลขค่าปัจจุบันของพิกัด Y (Cartesian) หรือขนาด (Polar)
PhaseSyncEnum.AnimationNodePhaseSync

กำหนดเวลาในการทำงานของโหนดลูกว่าสามารถซิงค์หรือไม่

  • Synced (ค่าเริ่มต้น): การซิงโครไนซ์ที่เป็นมาตรฐาน โหนดจะคำนวณ "ระยะเวลาที่เสมือนจริง" ตามค่าเฉลี่ยที่มีน้ำหนักของการใช้งานอยู่ ขนาดที่ทำงานของโหนดแต่ละตัวจะถูกปรับเพื่อให้ลูกทั้งหมดไปถึงช่วงเวลาเดียวกัน ทำให้อนิเมชันที่มีความยาวแตกต่างกันทำงานตามกันอย่างละเอียด
  • Unsynced: การผสมมาตรฐานที่แสดงว่าแต่คลิปนั้นสามารถก้าวล้ำได้ตามอัตราการเล่น
ข้อมูลเหตุการณ์
  • การจัดการเหตุการณ์: โหนดจะฟังเหตุการณ์จากโหนดลูกที่ทำงานอยู่ทั้งหมด
  • การปล่อยเหตุการณ์: เฉพาะเหตุการณ์จากการนำเข้าแรกที่มีน้ำหนักสูงสุดจะถูกส่งผ่าน จะถูกปรับตามน้ำหนักผสม ของเหตุการณ์จากการนำเข้าสำรองจะถูกปิดเสียง

Mask

โหนด Mask

นำมาสก์ที่กำหนดล่วงหน้ามาใช้กับอนิเมชั่น Pose การทำมาสก์จะถูกกำหนดโดยน้ำหนักที่กำหนดให้กับวัตถุ (เช่น ข้อต่อ) ในลำดับของโครงกระดูกเพื่อให้ควบคุมหรือทำให้อนิเมชันมีขอบที่เฉพาะเจาะจงได้

ข้อมูลนำเข้า
  • Pose: รุ่นอนิเมชันที่จะทำมาสก์
คุณสมบัติ
คุณสมบัติประเภทคำอธิบาย
MaskObjectValue

ObjectValue (สร้างขึ้นเป็นลูกโดยตรงของ Mask AnimationNodeDefinition) ที่กำหนดน้ำหนักมาสก์ ซึ่งอาจทำงานในหนึ่งในสองวิธี:

  • โดยตรง: ObjectValue เองมีแอตทริบิวต์ที่แผนที่ชื่อวัตถุโครงกระดูกไปยังค่าน้ำหนักเฉพาะ.
  • ตามการอ้างอิง: ObjectValue อ้างอิงไปยัง Instance อื่นซึ่งมีคุณสมบัติการแผนที่นี้ ทำให้สามารถใช้มาสก์ที่ร่วมกันในโหนดต่างๆ ได้

เมื่อต้องสร้างมาสก์ คุณสามารถเลือกโครงสร้างโครงกระดูก (HumanoidRigDescription หรือ Picker) เพื่อเติมเต็มลำดับ

  • HumanoidRigDescription: มาตรฐานเพลงมาสก์สำหรับตัวละครมาสก์
  • Picker: อนุญาตให้ผู้ใช้เลือกโครงกระดูกรายการใดรายการหนึ่งในงานเพื่อเติมเต็มมาสก์
InvertBooleanเมื่อเป็นจริงจะนำค่าน้ำหนักในรูปแบบ 1 - น้ำหนักสิ่งนี้จะช่วยให้เมื่อมาสก์กลับมาใช้ซ้ำโดยไม่สร้างสินทรัพย์ใหม่ได้
ข้อมูลเหตุการณ์
  • การจัดการเหตุการณ์: โหนดจะฟังเหตุการณ์ทั้งหมดจากข้อมูล Pose
  • การปล่อยเหตุการณ์: เหตุการณ์ทั้งหมดจากข้อมูล Pose จะถูกส่งผ่านโดยไม่มีการเปลี่ยนแปลง

Speed

โหนด Speed

ปรับอัตราการเล่นของอนิเมชันที่เข้ามา

ข้อมูลนำเข้า
  • Pose: ท่าทางอนิเมชันหรือซับกราฟที่ความเร็วในการเล่นจะถูกปรับ
คุณสมบัติ
คุณสมบัติประเภทคำอธิบาย
Speedหมายเลขคูณที่นำไปใช้กับเวลาที่เปลี่ยนแปลง (dtdt) 0.0 จะหยุดกราฟ 1.0 คือความเร็วปกติ และ 2.0 คือความเร็วสองเท่า
ข้อมูลเหตุการณ์
  • การจัดการเหตุการณ์: โหนดจะฟังเหตุการณ์จากข้อมูล Pose
  • การปล่อยเหตุการณ์: เหตุการณ์ทั้งหมดจากข้อมูล Pose จะถูกส่งผ่านโดยไม่มีการเปลี่ยนแปลง โปรดทราบว่าขณะที่ความเร็วในการเล่นของภาพที่มองเห็นจะเปลี่ยนแปลงไป แต่เวลาที่ปล่อยเหตุการณ์ (เช่น มาร์กเกอร์) จะมีการปรับค่าอย่างเหมาะสมตามอัตราการเล่นที่เปลี่ยนแปลง

GraphOutput

โหนด GraphOutput

แทนค่าท่าทางที่ประเมินได้สุดท้ายของกราฟ โหนดนี้จะรวมอยู่โดยอัตโนมัติในกราฟใหม่ทั้งหมดในตัวแก้ไขกราฟอนิเมชัน การมีอยู่ของมันช่วยให้มั่นใจได้ว่ากราฟถูกต้องและผลิตท่าทางอนิเมชันอย่างสม่ำเสมอ

ข้อมูลนำเข้า
  • Pose: ข้อมูลอนิเมชันสุดท้ายที่จะถูกนำไปใช้กับโครงกระดูก
คุณสมบัติ
  • ไม่มี
ข้อมูลเหตุการณ์
  • การจัดการเหตุการณ์: โหนดจะฟังเหตุการณ์ทั้งหมดที่ถูกส่งผ่านจากการนำเข้าสุดท้ายที่เชื่อมต่อ
  • การปล่อยเหตุการณ์: โหนดนี้ทำหน้าที่เป็นจุดออกสำหรับท่ออนิเมชันและไม่ได้ปล่อยสัญญาณกลับเข้าไปในกราฟ

การเปลี่ยนผ่าน

โหนดหลายตัวในกราฟอนิเมชัน (เช่น Select, Priority Select, Sequence, และ Random Sequence) จัดการว่าอนิเมชันผสมกันเมื่อเปลี่ยนระหว่างการนำเข้าสำหรับการป้องกันการซ้ำซ้อนในอ้างอิงโหนด พฤติกรรมเหล่านี้จะถูกกำหนดโดยการตั้งค่ากลุ่มคุณสมบัติการเปลี่ยนผ่านที่มีมาตรฐาน

การเปลี่ยนผ่านเริ่มต้น

การเปลี่ยนผ่านเริ่มต้น

พฤติกรรมการผสมมาตรฐานที่นำไปใช้กับโหนดเมื่อใดก็ตามที่มันเปลี่ยนไปยังการนำเข้าที่ใช้งานใหม่

  • DefaultTransitionDuration (หมายเลข): เวลา (ในวินาที) ที่ใช้ในการปรับผสมให้สมบูรณ์ในท่าทางใหม่
  • DefaultTransitionCurve (Enum.PoseEasingStyle): ฟังก์ชันการผ่อนคลายที่ใช้ในระหว่างการเปลี่ยนผ่าน ในปัจจุบันรองรับเฉพาะ Enum.PoseEasingStyle.Linear และ Enum.PoseEasingStyle.CubicV2

การบังคับเปลี่ยนผ่าน

การบังคับเปลี่ยนผ่าน

ลิงค์คุณสมบัติเฉพาะของการนำเข้าที่มีลำดับสูงกว่าจะมีลำดับในลำดับที่กำหนด สำหรับการเปลี่ยนผ่านจากโหนดที่เปลี่ยนไปยังข้อมูลการนำเข้าเฉพาะ

  • TransitionOverrideDuration (หมายเลข): ช่วงการเปลี่ยนผ่านที่ปรับเปลี่ยน
  • TransitionOverrideCurve (Enum.PoseEasingStyle): ปรับเปลี่ยนฟังก์ชันการผ่อนคลายในการเปลี่ยนผ่าน ค่าใช้ได้จะรองรับเฉพาะ Enum.PoseEasingStyle.Linear และ Enum.PoseEasingStyle.CubicV2

การจำลอง

พารามิเตอร์กราฟอนิเมชันจะมีเฉพาะใน AnimationTrack และไม่ได้มีการจำลองโดยอัตโนมัติ อาจมีการเปลี่ยนแปลงในอนาคต แต่อาจแนะนำวิธีที่ใช้กันอย่างแพร่หลาย:

  • Client → Server: การตั้งเวลา RemoteEvent เพื่อส่งพารามิเตอร์จากลูกค้าผู้ถือไปยังเซิร์ฟเวอร์ที่อัตราตฏิการที่คงที่
  • Server → ลูกค้าอื่นๆ: คุณสมบัติ Instance ที่จำลองอัตโนมัติไปยังลูกค้าทุกคน

ตัวละครผู้เล่น

สคริปต์ลูกค้าจะจัดการตัวละครผู้เล่น เนื่องจากเฉพาะลูกค้าที่เป็นเจ้าของเท่านั้นที่รู้สถานะการเล่นเกมปัจจุบัน (ข้อมูลการเคลื่อนไหว สถานะ Humanoid ฯลฯ) พารามิเตอร์จะต้องไหลจากลูกค้าที่เป็นเจ้าของไปยังเซิร์ฟเวอร์ และจากนั้นไปยังลูกค้าทุกคน

การตั้งค่า

ภายใต้ StarterCharacterScripts ให้สร้าง:

  • LocalScript สำหรับการขับอนิเมชันและพารามิเตอร์บนฝั่งลูกค้า
  • Script สำหรับการจำลองในฝั่งเซิร์ฟเวอร์
  • RemoteEvent สำหรับการสื่อสารจากลูกค้าถึงเซิร์ฟเวอร์

สคริปต์ลูกค้า

ลูกค้าที่เป็นเจ้าของจะขับเคลื่อนพารามิเตอร์จากเหตุการณ์การเล่นเกมและส่งไปยังเซิร์ฟเวอร์เป็นระยะเวลา ขณะที่ลูกค้าอื่นๆ อ่านคุณสมบัติที่จำลองจากสคริปต์เซิร์ฟเวอร์แทน


local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local character = script.Parent
local humanoid = character:WaitForChild("Humanoid")
local animator = humanoid:FindFirstChildOfClass("Animator") or humanoid
-- โหลดกราฟอนิเมชัน
local animation = Instance.new("Animation")
animation.AnimationId = "rbxassetid://YOUR_GRAPH_ID" -- แทนที่ด้วย ID ของกราฟที่เผยแพร่
local track = animator:LoadAnimation(animation)
track:Play()
local isLocalCharacter = Players:GetPlayerFromCharacter(character) == Players.LocalPlayer
if not isLocalCharacter then
-- อ่านพารามิเตอร์ที่จำลองจากสคริปต์เซิร์ฟเวอร์
local animateServer = script.Parent:WaitForChild("AnimateServer")
for attribute, value in animateServer:GetAttributes() do
track:SetParameter(attribute, value)
end
animateServer.AttributeChanged:Connect(function(attribute)
track:SetParameter(attribute, animateServer:GetAttribute(attribute))
end)
return
end
-- ผู้เล่นท้องถิ่น: ขับพารามิเตอร์จากการเล่นเกม
local params = {}
local function setParam(key, value)
track:SetParameter(key, value)
params[key] = value
end
-- ตัวอย่าง: ขับพารามิเตอร์จากสถานะ Humanoid
humanoid.Running:Connect(function(speed)
setParam("Speed", speed)
setParam("State", if speed < 0.1 then "Idle" else "Moving")
end)
-- ส่งพารามิเตอร์ไปยังเซิร์ฟเวอร์ในอัตราที่คงที่
local replicateEvent = script.Parent:WaitForChild("ReplicateEvent")
local TICK_RATE = 1 / 20
local lastSendTime = 0
RunService.Stepped:Connect(function(gameTime)
if gameTime - lastSendTime > TICK_RATE then
lastSendTime = gameTime
replicateEvent:FireServer(params)
end
end)

สคริปต์เซิร์ฟเวอร์

รับพารามิเตอร์จากลูกค้าที่เป็นเจ้าของขับเคลื่อนกราฟอนิเมชันฝั่งเซิร์ฟเวอร์ และส่งค่าผ่านคุณสมบัติเพื่อจำลองไปยังลูกค้าผู้อื่น


local Players = game:GetService("Players")
local character = script.Parent
local humanoid = character:WaitForChild("Humanoid")
local animator = humanoid:FindFirstChildOfClass("Animator") or humanoid
-- โหลดกราฟอนิเมชันเดียวกันบนเซิร์ฟเวอร์
local animation = Instance.new("Animation")
animation.AnimationId = "rbxassetid://YOUR_GRAPH_ID" -- ID ของกราฟเดียวกับลูกค้า
animation.Parent = script
local track = animator:LoadAnimation(animation)
track:Play()
-- รับพารามิเตอร์จากลูกค้าที่เป็นเจ้าของและจำลองผ่านคุณสมบัติ
local replicateEvent = script.Parent:WaitForChild("ReplicateEvent")
replicateEvent.OnServerEvent:Connect(function(player, params)
if Players:GetPlayerFromCharacter(character) ~= player then
return
end
for key, value in params do
track:SetParameter(key, value)
script:SetAttribute(key, value)
end
end)

NPCs

เนื่องจากเซิร์ฟเวอร์เป็นเจ้าของอนิเมชัน NPC จึงไม่จำเป็นต้องมีการจำลองจากเซิร์ฟเวอร์ไปยังลูกค้า ดำเนินการกราฟอนิเมชันบนเซิร์ฟเวอร์เขียนพารามิเตอร์เป็นคุณสมบัติในสคริปต์เซิร์ฟเวอร์และอ่านพวกเขาบนลูกค้าโดยใช้รูปแบบเดียวกัน Instance.AttributeChanged

ความล่าช้า

ลูกค้าอื่นๆ จะเห็นอนิเมชันด้วยความล่าช้าที่เล็กน้อยซึ่งเท่ากับช่วงเวลาของตั๋ว (มากถึง 50 มิลลิวินาทีที่ 20 Hz) บวกกับความล่าช้าในเครือข่าย คุณสามารถลดช่วงเวลาตั๋วโดยการเพิ่มความถี่ (เช่น 1/30) แม้จะเพิ่มปริมาณข้อมูลในเครือข่าย แต่ 20 Hz ก็เป็นตัวเลือกที่เหมาะสม และการผสมอนิเมชันมีความยืดหยุ่นมากพอที่ความล่าช้าที่เล็กน้อยจะยากที่จะสังเกต

©2026 Roblox Corporation. Roblox, โลโก้ Roblox และ Powering Imagination เป็นส่วนหนึ่งของเครื่องหมายการค้าที่จดทะเบียน และไม่ได้จดทะเบียนของเราในสหรัฐฯ และประเทศอื่นๆ