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

*เนื้อหานี้แปลโดยใช้ 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 เชื่อมต่อตัวเชื่อมต่อเอาต์พุตด้านบนขวาไปยังพอร์ต Graph Output Pose.

    โหนดทั้งหมดเชื่อมต่อกับโหนดเอาต์พุตสุดท้าย
  10. OPTIONAL
    กำหนดพารามิเตอร์ให้กับตัวแปร 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
  • คุณสมบัติข้อมูลนำเข้า – การตั้งค่าที่เชื่อมโยงโดยตรงกับข้อมูลนำเข้าที่เฉพาะเจาะจง (ข้อมูลนำเข้าที่ไม่เคลื่อนไหวที่กำหนดให้กับตำแหน่ง 0.5 บนโหนด Blend1D)
  • ข้อมูลเหตุการณ์ – เหตุการณ์ที่ปล่อยออกหรือบริโภคโดยโหนดเพื่อกระตุ้นตรรกะภายในกราฟหรือสคริปต์ Luau ภายนอก พฤติกรรมนี้อาจเปลี่ยนแปลงไปในระหว่างการพัฒนารุ่นเบต้า

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

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

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

คลิป

โหนดคลิป

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

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

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

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

เลือก

โหนดเลือก

เลือกจากข้อมูลนำเข้าสำหรับการเลือกที่หลากหลายผ่านคุณสมบัติ Selection ทุกครั้งที่การเลือกปัจจุบันเปลี่ยนแปลง จะกระตุ้นการ เปลี่ยนผ่าน ใหม่

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

PrioritySelect

โหนด Priority Select

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

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

ลำดับ

โหนดลำดับ

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

ข้อมูลนำเข้า
  • Input1...InputN
    • TransitionOverrideWaitFor (Enum.AnimationNodeWaitFor): ระบุเงื่อนไขที่ต้องเป็นจริงก่อนที่ลำดับจะก้าวไปยังข้อมูลนำเข้าสำหรับการเลือกถัดไป จะมีการแทนที่การตั้งค่า DefaultWaitFor ของระดับโหนด
      • Finished (ค่าเริ่มต้น): ก้าวไปยังข้อมูลนำเข้าสำหรับการเลือกถัดไปเมื่อข้อมูลนำเข้าสำหรับการเลือกปัจจุบันเสร็จสิ้นรอบหนึ่ง รอบการก้าวไปข้างหน้าขึ้นอยู่กับข้อมูลนำเข้าสำหรับการเลือกที่เชื่อมต่อ:
        • คลิปเล่นครั้งเดียว: ก้าวไปข้างหน้าเมื่อคลิปเสร็จสิ้น
        • คลิปวนซ้ำ: ก้าวไปข้างหน้าเมื่อวนซ้ำหนึ่งรอบเสร็จสิ้น
        • ลำดับที่มีการวนซ้ำไม่สิ้นสุด: ก้าวไปข้างหน้าเมื่อมีการวนซ้ำหนึ่งรอบผ่านข้อมูลนำเข้าสำหรับการเลือกทั้งหมด
        • ลำดับที่มีการวนซ้ำที่สิ้นสุด: ก้าวไปข้างหน้าเมื่อวนซ้ำทั้งหมดเสร็จสิ้น
      • Trigger: เปิดใช้งานข้อมูลนำเข้าสำหรับการเลือกถัดไปเมื่อการแสดงออกตรรกะที่กำหนดเองประเมินเป็นจริง
    • WaitForTrigger (Boolean): มีให้เฉพาะเมื่อ TransitionOverrideWaitFor ถูกตั้งค่าเป็น Trigger
คุณสมบัติ
คุณสมบัติประเภทคำอธิบาย
LoopCountNumberจำนวนครั้งที่ต้องวนซ้ำผ่านลำดับทั้งหมด ค่าที่เป็น 0 (ค่าเริ่มต้น) หมายถึงการวนซ้ำไม่สิ้นสุด เมื่อถึงจำนวนที่กำหนด โหนดจะเคารพการวนซ้ำหรือการตั้งค่าการถือของข้อมูลนำเข้าสำหรับการเลือกสุดท้าย
DefaultWaitForEnum.AnimationNodeWaitForเงื่อนไขการรอพื้นฐานที่ใช้กับข้อมูลนำเข้าสำหรับการเลือกทั้งหมด ข้อมูลนำเข้าสำหรับการเลือกแต่ละรายการสามารถแทนที่สิ่งนี้ด้วยคุณสมบัติข้อมูลนำเข้าสำหรับการเลือก TransitionOverrideWaitFor ของตนเอง
ข้อมูลเหตุการณ์
  • การจัดการเหตุการณ์: เหตุการณ์จากข้อมูลนำเข้าสำหรับการเลือกที่ใช้งานอยู่ในปัจจุบันจะส่งผ่านไปโดยน้ำหนักไม่เปลี่ยนแปลง
  • การปล่อยเหตุการณ์: ส่งผ่านเหตุการณ์ทั้งหมดจากข้อมูลนำเข้าสำหรับการเลือกที่ใช้งานอยู่ในลำดับเท่านั้น ในระหว่างการเปลี่ยนผ่าน การปล่อยเหตุการณ์จะปฏิบัติตาม กฎเหตุการณ์ทั่วโลก.

RandomSequence

โหนดลำดับสุ่ม

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

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

Over

โหนด Over

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

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

Add

โหนด Add

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

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

Subtract

โหนด Subtract

แปลงอนิเมชันเป็นท่าทางที่เพิ่มขึ้นโดยการลบท่าทางพื้นฐานที่สัมพันธ์จากท่าทางเป้าหมาย (AWeight×BA - \text{Weight} \times B) Weight จะปรับขนาดท่าทาง B ก่อนที่จะถูกลบ (ไม่ถูกจำกัด)

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

Blend1D

โหนด Blend1D

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

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

กำหนดว่าการตั้งเวลาของข้อมูลนำเข้าสำหรับการเลือกลูกควรได้รับการซิงโครไนซ์หรือไม่

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

Blend2D

โหนด Blend2D

ผสมท่าทางอนิเมชันหลายท่าทางเข้าด้วยกันตามพารามิเตอร์ข้อมูลนำเข้าสำหรับการเลือกสองพารามิเตอร์ภายในพื้นที่พิกัด 2D สิ่งนี้ทำให้โหนด Blend1D สามารถจัดการกับสถานการณ์ที่ซับซ้อนได้ เช่น การผสมตามทิศทางการเคลื่อนไหวและความเร็วในเวลาเดียวกัน

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

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

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

กำหนดว่าการตั้งเวลาของข้อมูลนำเข้าสำหรับการเลือกลูกควรได้รับการซิงโครไนซ์หรือไม่

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

Mask

โหนด Mask

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

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

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

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

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

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

Speed

โหนด Speed

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

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

GraphOutput

โหนด GraphOutput

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

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

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

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

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

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

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

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

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

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

  • TransitionOverrideDuration (number): แทนที่ระยะเวลาเปลี่ยนผ่านค่าเริ่มต้น
  • TransitionOverrideCurve (Enum.PoseEasingStyle): แทนที่โค้งการเปลี่ยนผ่านค่าเริ่มต้น ปัจจุบันรองรับเฉพาะ Enum.PoseEasingStyle.Linear และ Enum.PoseEasingStyle.CubicV2

การจำลอง

พารามิเตอร์กราฟอนิเมชันและสถานะโหนดภายในจะถูกจำลองโดยอัตโนมัติ โหมดการจำลองจะถูกกำหนดโดย Workspace.AuthorityMode ในขณะที่สคริปต์ Animate ถูกสร้างขึ้น:

  • ใน Enum.AuthorityMode.Automatic: พารามิเตอร์ที่ตั้งค่าผ่าน AnimationTrack:SetParameter() จะถูกจำลองโดยอัตโนมัติไปยังเพื่อนร่วมงานคนอื่น
  • ใน Enum.AuthorityMode.Server: เซิร์ฟเวอร์จะขับเคลื่อนการจำลองกราฟทั้งหมด สถานะโหนดทั้งหมด เช่น เวลาที่ผ่านไปสำหรับ Enum.AnimationNodeType.ClipNode และพารามิเตอร์กราฟจะถูกจำลองโดยอัตโนมัติจากเซิร์ฟเวอร์ไปยังลูกค้า ลูกค้าของผู้เล่นที่เป็นเจ้าของจะใช้การคาดการณ์เพื่อให้การเล่นในท้องถิ่นราบรื่น

สคริปต์ Animate ตัวอย่าง

ในการสร้างสคริปต์ตัวอย่างเพื่อขับเคลื่อนกราฟอนิเมชันสำหรับการตั้งค่า ให้ใช้ Graph -> Create Animate script ในตัวแก้ไขกราฟอนิเมชัน สิ่งนี้จะสร้างลำดับชั้นของสคริปต์ที่วางอยู่ภายใต้ StarterCharacterScripts (สำหรับตัวละครผู้เล่น) หรือโดยตรงบนการตั้งค่า (สำหรับ NPC):

Animate (ModuleScript)
├── RunClient (LocalScript)
└── RunServer (Script, RunContext = Legacy)

สคริปต์ Animate ModuleScript จะมีตรรกะการโหลดกราฟ สคริปต์ RunClient และ RunServer จะเรียกใช้ในบริบทที่เหมาะสม สคริปต์ที่รวมอยู่ขึ้นอยู่กับกรณีการใช้งาน:

กรณีการใช้งานสคริปต์ที่รวมอยู่พฤติกรรม
NPC (โหมดใด ๆ)RunServerเซิร์ฟเวอร์โหลดและเล่นกราฟ สถานะจะถูกจำลองไปยังลูกค้าทั้งหมดโดยอัตโนมัติ
ผู้เล่น + Enum.AuthorityMode.ServerRunServer + RunClientเซิร์ฟเวอร์ขับเคลื่อนกราฟอย่างมีอำนาจ ลูกค้าที่เป็นเจ้าของเปิดใช้งาน Enum.PredictionMode สำหรับการคาดการณ์ในท้องถิ่นที่อิงจากการย้อนกลับ
ผู้เล่น + Enum.AuthorityMode.AutomaticRunClientลูกค้าที่เป็นเจ้าของโหลดและเล่นกราฟ พารามิเตอร์จะถูกจำลองโดยอัตโนมัติไปยังเซิร์ฟเวอร์และลูกค้าอื่น

คุณสมบัติต่อไปนี้จะถูกเก็บไว้ในสคริปต์ Animate และกำหนดพฤติกรรมของมัน:

คุณสมบัติประเภทคำอธิบาย
GraphNameStringชื่อของสินทรัพย์กราฟอนิเมชัน
CharacterNameStringชื่อของการตั้งค่าที่กราฟมุ่งเป้าไปที่
SourceAssetIdStringAsset ID ที่เผยแพร่ของกราฟ ใช้ในระหว่างการทำงานในเกมที่เผยแพร่
IsServerAuthorityBooleanสคริปต์ถูกสร้างขึ้นด้วย Workspace.AuthorityMode ตั้งค่าเป็น Server หรือไม่ กำหนดกลยุทธ์การจำลอง
PreviewInStudioBooleanเมื่อเป็นจริง (ค่าเริ่มต้น) การทดสอบใน Studio จะโหลดกราฟที่ยังไม่ได้เผยแพร่ในท้องถิ่นเพื่อให้คุณสามารถปรับปรุงได้โดยไม่ต้องเผยแพร่ ตั้งค่าเป็น false เพื่อทดสอบสินทรัพย์ที่เผยแพร่ใน Studio หมายเหตุว่าสิ่งนี้ยังไม่ได้รับการสนับสนุนใน Enum.AuthorityMode.Server

การจำลองพารามิเตอร์ในโหมดอัตโนมัติ

เมื่อ Workspace.AuthorityMode เป็น Automatic:

  • ลูกค้าที่เป็นเจ้าของ ขับเคลื่อนกราฟตัวละครผู้เล่น; เซิร์ฟเวอร์ ขับเคลื่อนกราฟ NPC
  • พารามิเตอร์ที่ตั้งค่าผ่าน AnimationTrack:SetParameter() จะถูกจำลองโดยอัตโนมัติไปยังเพื่อนร่วมงานคนอื่น การเรียก SetParameter หลายครั้งภายในเฟรมเดียวจะถูกรวมเข้าด้วยกัน (ผู้เขียนล่าสุดชนะ)
  • ไม่ต้องการการเขียนสคริปต์เพิ่มเติมสำหรับการขนส่งพารามิเตอร์ — เอนจินจัดการการจำลองภายใน
  • ลูกค้าอื่นจะเห็นการอัปเดตพารามิเตอร์ด้วยความล่าช้าขนาดเล็ก (หนึ่งช่วงเวลาส่งบวกกับความล่าช้าในเครือข่าย)

อำนาจของเซิร์ฟเวอร์

เมื่อ Workspace.AuthorityMode เป็น Server:

  • เซิร์ฟเวอร์ มีอำนาจเหนือกราฟทั้งหมด — มันทำการจำลองและจำลองสถานะกราฟทั้งหมด
  • สิ่งที่ถูกจำลอง: ทั้งพารามิเตอร์และสถานะโหนดภายใน รวมถึงเวลาที่ผ่านไป การเลือกปัจจุบัน ความก้าวหน้าของการเปลี่ยนผ่าน จำนวนรอบ และเมล็ด RNG สิ่งนี้ช่วยให้แน่ใจว่าลูกค้าทั้งหมดเห็นพฤติกรรมอนิเมชันที่เหมือนกัน
  • ตัวละครผู้เล่น: เซิร์ฟเวอร์ขับเคลื่อนกราฟ ลูกค้าของผู้เล่นที่เป็นเจ้าของจะเปิดใช้งานสคริปต์ RunClient โดยอัตโนมัติซึ่งเปิดใช้งาน Enum.PredictionMode บน Animator ดังนั้นผู้เล่นในท้องถิ่นจึงเห็นอนิเมชันที่ราบรื่นและคาดการณ์ซึ่งจะปรับให้ตรงกับเซิร์ฟเวอร์เมื่อมีความไม่ตรงกัน
  • NPCs: เซิร์ฟเวอร์ขับเคลื่อนกราฟโดยเฉพาะ ลูกค้าสังเกตเห็นสถานะที่จำลองโดยไม่มีการจำลองในท้องถิ่น

การขับเคลื่อนพารามิเตอร์

ใช้ AnimationTrack:SetParameter() จากทุกสคริปต์ที่รันกราฟ:

  • NPC (โหมดใด ๆ): เรียก SetParameter จาก RunServer (หรือสคริปต์เซิร์ฟเวอร์ Script ใด ๆ ที่เข้าถึง AnimationTrack)
  • ตัวละครผู้เล่นใน Enum.AuthorityMode.Server: เรียก SetParameter จาก ทั้งสอง RunServer และ RunClient เซิร์ฟเวอร์ต้องการพารามิเตอร์เพื่อขับเคลื่อนการจำลองที่มีอำนาจ และลูกค้าที่เป็นเจ้าของต้องการพารามิเตอร์เดียวกันเพื่อขับเคลื่อนการคาดการณ์ในท้องถิ่น
  • ตัวละครผู้เล่นใน Enum.AuthorityMode.Automatic: เรียก SetParameter จาก RunClient (หรือสคริปต์ LocalScript ใด ๆ ที่เข้าถึง AnimationTrack)

สคริปต์ Animate ที่สร้างขึ้นรวมถึงบล็อก SetParameter ที่ถูกคอมเมนต์ออกเป็นจุดเริ่มต้น ยกเลิกการคอมเมนต์และปรับเปลี่ยนเพื่อขับเคลื่อนพารามิเตอร์จากสถานะการเล่น (ความเร็วในการเคลื่อนไหว สถานะของมนุษย์ ทิศทางการป้อนข้อมูล ฯลฯ)

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