محرر رسم الرسوم المتحركة هو أداة بصرية تعتمد على العقد تمكّن الفنانين التقنيين والمتحركين من بناء منطق الرسوم المتحركة المعقد مباشرة داخل Roblox Studio. من خلال توفير واجهة مبسطة لإنشاء سلوكيات مثل أشجار الدمج، فإنه يزيل الاعتماد التقليدي على البرمجة اليدوية لتحريك الشخصيات.
يعمل هذا النظام بالتوازي مع سير عمل الرسوم المتحركة الحالي لديك:
- محرر الرسوم المتحركة: استمر في استخدام محرر الرسوم المتحركة كأداة رئيسية لتأليف المقاطع الفردية وضبط الإطارات الرئيسية والمنحنيات.
- محرر رسم الرسوم المتحركة: استخدم هذه الأداة لأخذ تلك المقاطع وتنظيمها في شجرة منطقية لدفع سلوكيات اللعب المعقدة.
تم تصميمه لتعزيز التعاون، حيث يسمح الرسم البياني البصري للمطورين بفحص وتصحيح وفهم المنطق الذي أنشأه المتحركون بسرعة. بينما يركز الفنانون على تحسين الحركة التفاعلية، لا يزال بإمكان المطورين الوصول إلى عقد رسم الرسوم المتحركة برمجيًا للتحكم المباشر في الرسوم المتحركة المدمجة والحالات.
بناء رسم بياني
لبدء بناء منطق لشخصية قابلة للتحريك، قم بالوصول إلى محرر رسم الرسوم المتحركة عبر علامة التبويب Avatar في شريط أدوات Studio. توضح الخطوات التالية كيفية تهيئة هيكل وبناء شبكة عقد أساسية باستخدام الرسوم المتحركة الافتراضية للمشي والموجة.
للتعمق في التطبيقات العملية، يمكنك استكشاف ملف مرجع رسم الرسوم المتحركة، الذي يحتوي على أمثلة أساسية ومعقدة للتنفيذ.
لإنشاء رسمك البياني الخاص للرسوم المتحركة، مشابهًا للمثال الأساسي المقدم في المرجع، استخدم الخطوات التالية:
في Studio، أضف هيكلًا قابلًا للتحريك عن طريق الانتقال إلى علامة التبويب Avatar واختيار Character ⟩ My Avatar.

افتح محرر رسم الرسوم المتحركة عن طريق الانتقال إلى Graph Editor في علامة التبويب Avatar.

حدد الهيكل القابل للتحريك في نافذة العرض ثلاثية الأبعاد واختر Create Graph.
في محرر الرسم البياني، انقر بزر الماوس الأيمن واختر Clip.

في عقدة Clip الجديدة، قم بتعيين معرف الرسوم المتحركة.
اختر قائمة Animation ID المنسدلة.
لتقديم معرف أصل الرسوم المتحركة المحدد، انقر على Import.

في حقل Animation ID، أضف الرسوم المتحركة الافتراضية للمشي: 507777826.
اختر Import.
أضف عقدة مقطع أخرى من خلال تكرار الخطوات 4-5 باستخدام الرسوم المتحركة الافتراضية للموجة: 507770239.

في محرر الرسم البياني، انقر بزر الماوس الأيمن واختر Add.

قم بتوصيل عقد Clip بعقدة Add عن طريق سحب الموصل الخارجي العلوي الأيمن إلى المنفذ المناسب:
- قم بتوصيل عقدة Clip مع الرسوم المتحركة للمشي إلى منفذ Base.
- قم بتوصيل عقدة Clip مع الرسوم المتحركة للموجة إلى منفذ Additive.

من عقدة Add، قم بتوصيل الموصل الخارجي العلوي الأيمن إلى منفذ Pose في مخرج الرسم البياني.

- اختياريقم بتعيين معلمة لمتغير Speed الخاص بك.
انقر واسحب المنفذ الأخضر Speed إلى منطقة فارغة. تظهر عقدة معلمة جديدة.

في الزاوية العلوية اليسرى من محرر الرسم البياني، استخدم لوحة المعلمات لتعديل المعلمات بسرعة في العقد الخاصة بك. يمكنك أيضًا الوصول إلى هذا برمجيًا.

اختبر الرسوم المتحركة عن طريق الضغط على زر التشغيل.

جرب اختبار أوزان وسرعات وأوضاع تشغيل مختلفة، ورسوم متحركة أخرى. لمزيد من المعلومات حول العقد الفردية، راجع مرجع العقد.
تكامل API
إنشاء ونشر رسم بياني للرسوم المتحركة يتبع خط أنابيب الرسوم المتحركة القياسي في Roblox. بعد اختيار هيكل في محرر رسم الرسوم المتحركة، يتم إنشاء أصل جديد من نوع AnimationGraphDefinition. يعمل هذا الأصل كحاوية لعقدك، والاتصالات، والمعلمات. بمجرد الانتهاء من منطقك، تقوم بنشر الرسم البياني للحصول على معرف أصل قياسي.
في نصوصك، تتفاعل مع هذه الرسوم البيانية عن طريق تحميلها على Animator كما تفعل مع الرسوم المتحركة التقليدية. لدفع منطق الرسم البياني الداخلي، استخدم AnimationTrack:SetParameter() لتمرير القيم في الوقت الحقيقي - مثل سرعة الحركة أو القيم المنطقية للحالة - مباشرة إلى متغيرات الرسم البياني.
local animation = Instance.new("Animation")
animation.AnimationId = "rbxassetid://123456789" -- معرف الرسم البياني المنشور الخاص بك
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 الخارجية. قد يتغير هذا السلوك على مدار تطوير النسخة التجريبية.
قواعد الأحداث العالمية
تنطبق القواعد التالية على جميع العقد والانتقالات بشكل افتراضي:
- تنتشر الأحداث لأعلى من عقدتها المصدر عبر الرسم البياني. تحمل كل حدث وزنًا يمثل تأثير مصدره في الدمج النهائي. إذا وصل الوزن إلى الصفر في أي نقطة، يتم كتم الصوت عن الحدث.
- تمر العقد التي لا تحتوي على منطق أحداث مخصص بجميع الأحداث دون تغيير؛ قد تقوم العقد التي تدمج أو تختار بين المدخلات بتعديل الوزن أو حظر الأحداث من المدخلات غير الأساسية (انظر قسم الأحداث لكل عقدة).
- يمكن ملاحظة أحداث العلامات التي تصل إلى أعلى الرسم البياني عبر AnimationTrack:GetMarkerReachedSignal().
Clip

مرجع إلى أصل AnimationClip. تعمل هذه كعقدة ورقية في الرسم البياني، وتولد بيانات الرسوم المتحركة الخام التي تغذي العقد الأخرى للدمج أو الاختيار أو التعديل.
- المدخلات
- لا شيء
- الخصائص
الخاصية النوع الوصف AnimationId سلسلة أصل الرسوم المتحركة للتشغيل (مثل rbxassetid://12345). PlayMode Enum.AnimationNodePlayMode يحدد سلوك المقطع بمجرد أن يصل إلى نهاية مدته.
- Loop (افتراضي): يعيد التشغيل تلقائيًا من البداية بمجرد انتهاء المقطع.
- PingPong: يشغل من البداية إلى النهاية، ثم يشغل على الفور في الاتجاه المعاكس من النهاية إلى البداية.
- OnceAndHold: يشغل مرة واحدة ويحافظ على الوضع النهائي عند الانتهاء.
- OnceAndReset: يشغل مرة واحدة ويعود إلى الوضع الابتدائي عند الانتهاء.
Reverse منطقي يتحكم في اتجاه التشغيل. Speed رقم مضاعف لمعدل التشغيل. 0.0 يوقف الرسم البياني، 1.0 هو السرعة الطبيعية، و2.0 هو ضعف السرعة. Trim منطقي يبدل ما إذا كان يجب تقصير مدة المقطع. TrimStart رقم الطابع الزمني المطلق (بالثواني) حيث يجب أن يبدأ التشغيل. TrimEnd رقم الطابع الزمني المطلق (بالثواني) حيث يجب أن ينتهي التشغيل. - بيانات الحدث
- معالجة الحدث: لا شيء. هذه عقدة ورقية بدون أطفال.
- إصدار الحدث: يقرأ العلامات المخصصة المدمجة في مقطع الرسوم المتحركة (مثل "Footstep"، "WeaponSwing") ويصدرها كأحداث مسماة في الإطار الدقيق الذي تحدث فيه. إذا تم تقليم المقطع، يتم إصدار العلامات فقط ضمن الفترة المحددة [TrimStart, TrimEnd] (شاملة).
Select

يختار بين أي عدد من المدخلات عبر خاصية Selection. كلما تغير الاختيار الحالي، يتم تحفيز انتقال جديد transition.
- المدخلات
- Input1...InputN
- الخصائص
الخاصية النوع الوصف Selection سلسلة معرف فريد للمدخل الذي سيتم اختياره، يتطابق مع اسم اتصال المدخل (مثل "Walk"). - بيانات الحدث
- معالجة الحدث: تمر الأحداث من المدخل المحدد حاليًا دون تغيير وزنها.
- إصدار الحدث: تمر جميع الأحداث من المدخل المحدد حاليًا فقط. خلال الانتقال، يتبع إصدار الحدث القواعد العالمية للأحداث.
PrioritySelect

يقيم قائمة من المدخلات المتصلة من الأعلى إلى الأسفل ويشغل الأول الذي يتم تقييم شرطه على أنه صحيح. يسمح ذلك باختيار الرسوم المتحركة الهرمي بناءً على منطق محدد. كلما تغير الاختيار الحالي، يتم تحفيز انتقال جديد transition.
- المدخلات
- Input1...InputN
- Trigger (منطقي): شرط منطقي يجب أن يكون صحيحًا لتنشيط هذا المدخل. في الإصدارات الحالية، يتم توصيل هذا بمعلمة منطقية.
- TransitionOverrideInterruptible (Enum.AnimationNodeInterruptible): يحدد القاعدة التي يمكن بموجبها مقاطعة هذه الرسوم المتحركة النشطة بواسطة مدخل ذي أولوية أعلى. يتجاوز إعداد DefaultInterruptible على مستوى العقدة.
- Always (افتراضي): يمكن مقاطعة المدخل في أي وقت بواسطة شرط ذي أولوية أعلى.
- Finished: يجب أن تكمل الرسوم المتحركة الحالية تشغيلها قبل أن يتمكن مدخل ذي أولوية أعلى من السيطرة.
- Trigger: يمكن مقاطعة المدخل فقط عندما يتم تعيين InterruptibleTrigger على true.
- InterruptibleTrigger (منطقي): متاح فقط إذا تم تعيين TransitionOverrideInterruptible على Trigger. يمكن مقاطعة المدخل عندما يكون هذا التعبير المحدد صحيحًا.
- الخصائص
الخاصية النوع الوصف DefaultInterruptible Enum.AnimationNodeInterruptible قاعدة قاعدة المقاطعة المطبقة على جميع المدخلات. يمكن لكل مدخل تجاوز ذلك باستخدام خاصية المدخل TransitionOverrideInterruptible الخاصة به. - بيانات الحدث
- معالجة الحدث: تمر الأحداث من المدخل المحدد حاليًا دون تغيير وزنها.
- إصدار الحدث: تمر جميع الأحداث من المدخل المحدد حاليًا فقط. خلال الانتقال، يتبع إصدار الحدث القواعد العالمية للأحداث.
Sequence

ينشط المدخلات المتصلة بترتيب تسلسلي محدد بناءً على شروط الانتظار المحددة. كلما تغير الاختيار الحالي، يتم تحفيز انتقال جديد transition.
- المدخلات
- Input1...InputN
- TransitionOverrideWaitFor (Enum.AnimationNodeWaitFor): يحدد الشرط الذي يجب أن يتحقق قبل أن يتقدم التسلسل إلى المدخل التالي. يتجاوز إعداد DefaultWaitFor على مستوى العقدة.
- Finished (افتراضي): يتقدم إلى المدخل التالي عندما تكمل المدخل الحالي دورة. يعتمد سلوك التقدم على المدخل المتصل:
- مقطع تشغيل مرة واحدة: يتقدم عندما ينتهي المقطع.
- مقطع متكرر: يتقدم بعد إكمال دورة كاملة.
- تسلسل مع حلقات لانهائية: يتقدم بعد دورة كاملة عبر جميع المدخلات.
- تسلسل مع حلقات محدودة: يتقدم بعد إكمال جميع الحلقات.
- Trigger: ينشط المدخل التالي عندما يتم تقييم تعبير منطقي مخصص على أنه صحيح.
- WaitForTrigger (منطقي): متاح فقط عندما يتم تعيين TransitionOverrideWaitFor على Trigger.
- الخصائص
الخاصية النوع الوصف LoopCount رقم عدد المرات التي يجب أن تمر فيها عبر التسلسل بالكامل. تشير القيمة 0 (افتراضي) إلى حلقة لانهائية. بمجرد الوصول إلى العدد، تحترم العقدة إعدادات التكرار أو التثبيت للمدخل النهائي. DefaultWaitFor Enum.AnimationNodeWaitFor شرط الانتظار الأساسي المطبق على جميع المدخلات. يمكن لكل مدخل تجاوز ذلك باستخدام خاصية المدخل TransitionOverrideWaitFor الخاصة به. - بيانات الحدث
- معالجة الحدث: تمر الأحداث من المدخل النشط حاليًا دون تغيير وزنها.
- إصدار الحدث: تمر جميع الأحداث من المدخل النشط حاليًا في التسلسل فقط. خلال الانتقال، يتبع إصدار الحدث القواعد العالمية للأحداث.
RandomSequence

يختار ويشغل أحد المدخلات المتصلة بشكل عشوائي. عندما تكتمل الرسوم المتحركة المحددة حاليًا، تختار العقدة عشوائيًا مدخلًا آخر للتشغيل. قم بتعيين وزن محدد لكل مدخل للتأثير على احتمال اختياره. كلما تغير الاختيار الحالي، يتم تحفيز انتقال جديد transition.
- المدخلات
- Input1...InputN
- Weight (رقم): يحدد احتمال اختيار هذا المدخل؛ الأوزان الأعلى تزيد من فرصة الاختيار.
- الخصائص
الخاصية النوع الوصف PlayCount رقم عدد المدخلات التي ستشغلها العقدة قبل التوقف. بمجرد الوصول، تحترم العقدة إعدادات التكرار أو التثبيت للمدخل النهائي. الافتراضي هو 0 للانتهاء اللانهائي Seed رقم قيمة تستخدم لتهيئة مولد الأرقام العشوائية (RNG)، مما يضمن أن تظل التسلسل متسقة عبر عملاء مختلفين. الافتراضي هو -1 للبذور العشوائية. - بيانات الحدث
- معالجة الحدث: تمر الأحداث من المدخل النشط حاليًا دون تغيير وزنها.
- إصدار الحدث: تمر جميع الأحداث من المدخل النشط حاليًا في التسلسل فقط. خلال الانتقال، يتبع إصدار الحدث القواعد العالمية للأحداث.
Over

يضع وضع Over فوق وضع Base. عند دمجه مع عقدة Mask، تكشف المفاصل المmasked في وضع Over وضع Base بالكامل، مما يخلق تأثير تراكب شفاف.
- المدخلات
- Base: الخلفية أو الطبقة السفلية، عادةً ما تكون رسوم متحركة كاملة الجسم مثل الحركة أو حالة السكون.
- Over: الطبقة الأمامية أو العليا التي سيتم تطبيقها فوق القاعدة، مثل إيماءة اليد أو رسوم متحركة لاستخدام الأداة.
- الخصائص
الخاصية النوع الوصف Weight رقم وزن الدمج المستخدم لتخفيف وضع Over. الافتراضي هو 1.0 (تجاوز كامل) وغير مقيد. - بيانات الحدث
- معالجة الحدث:
- تستمع العقدة للأحداث من كل من المدخلات Base وOver.
- إصدار الحدث:
- أحداث Base: تمر جميع الأحداث من المدخل Base دون تعديل.
- أحداث Over: يتم تعديل أحداث المدخل Over بواسطة خاصية الوزن.
- عند الوزن 0.5، تنتشر أحداث Over بوزن نصف
- عند الوزن 0، يتم كتمها.
Add

يضيف وضع Additive إلى وضع Base، مخففًا بواسطة Weight محدد (غير مقيد).
- المدخلات
- Base: وضع الرسوم المتحركة الأساسي.
- Additive: الوضع الذي سيتم طباعته على القاعدة.
- الخصائص
الخاصية النوع الوصف Weight رقم يحدد قوة الوضع الإضافي المطبق على القاعدة. - بيانات الحدث
- معالجة الحدث: تستمع العقدة للأحداث من كل من المدخلات Base وAdditive.
- إصدار الحدث: تمر جميع الأحداث من كل من المدخلات Base وAdditive دون تعديل.
Subtract

تحول الرسوم المتحركة إلى وضع إضافي عن طريق طرح وضع قاعدة نسبي من الوضع المستهدف (). يقوم Weight بتعديل وضع B قبل الطرح (غير مقيد).
- المدخلات
- A: وضع الرسوم المتحركة المستهدف.
- B: وضع القاعدة النسبي الذي سيتم طرحه.
- الخصائص
الخاصية النوع الوصف Weight رقم يعدل وضع B قبل طرحه من A. عند 1.0 (افتراضي)، يتم طرح B بالكامل؛ عند 0.0، لا يحدث طرح. - بيانات الحدث
- معالجة الحدث: تستمع العقدة للأحداث من كل من Input A وInput B.
- إصدار الحدث: تمر جميع الأحداث من كل من Input A وInput B دون تعديل.
Blend1D

تقوم بالتداخل الخطي بين وضعي الرسوم المتحركة الأقرب إلى موضع المدخل الحالي على محور واحد.
- المدخلات
- Input1...InputN
- Position (رقم): الإحداثي المحدد لكل مدخل لاحق على محور الدمج.
- الخصائص
الخاصية النوع الوصف Position رقم القيمة النشطة الحالية على محور الدمج المستخدمة لعينات الرسوم المتحركة. إذا كانت Position خارج نطاق مواضع المدخلات المحددة، تقوم العقدة بالتقدير باستخدام المدخلات الأقرب. PhaseSync Enum.AnimationNodePhaseSync يحدد ما إذا كان يجب مزامنة توقيت المدخلات الفرعية.
- Synced (افتراضي): مزامنة طبيعية. تحسب العقدة "مدة افتراضية" بناءً على المتوسط المرجح للمدخلات النشطة. يتم تعديل خطوة الوقت لكل عقدة مدخل بحيث تتقارب جميع المدخلات إلى نفس المرحلة، مما يحافظ على الرسوم المتحركة ذات الأطوال المختلفة في تناغم.
- Unsynced: دمج قياسي حيث تتقدم المقاطع بشكل مستقل بمعدلات التشغيل الخاصة بها.
- بيانات الحدث
- معالجة الحدث: تستمع العقدة للأحداث من جميع العقد الفرعية النشطة حاليًا.
- إصدار الحدث: تمر فقط الأحداث من المدخل النشط ذو الوزن الأعلى، مقاسة بواسطة وزن الدمج الخاص به. يتم كتم أحداث المدخل الثانوي.
Blend2D

تقوم بدمج عدة أوضاع رسوم متحركة معًا بناءً على معلمتين مدخلتين ضمن مساحة إحداثيات ثنائية الأبعاد. هذا يعمم عقدة Blend1D للتعامل مع سيناريوهات معقدة، مثل الدمج بناءً على كل من اتجاه الحركة والسرعة في نفس الوقت.
- المدخلات
- Input1...InputN
- X (رقم): الإحداثي X لكل مدخل لاحق.
- Y (رقم): الإحداثي Y لكل مدخل لاحق.
- الخصائص
الخاصية النوع الوصف InputMode Enum.AnimationNodeBlend2DInputMode يحدد نظام الإحداثيات المستخدم لتقييم مساحة الدمج:
- Cartesian (افتراضي): يستخدم إحداثيات الشبكة ثنائية الأبعاد القياسية. تمثل X وY الموضع الحالي داخل مساحة الدمج.
- Polar: يستخدم القيم الزاوية والمقدار. تمثل X الاتجاه بالراديان، بينما تمثل Y المقدار أو قوة الحركة. يتم وزن الاتجاه بشكل أكبر من المقدار، لذا فإن المدخلات عند زوايا مشابهة ولكن بمقادير مختلفة تندمج بشكل أكثر سلاسة من المدخلات عند زوايا مختلفة.
X رقم الإحداثي X الحالي (كارتيسي) أو الاتجاه بالراديان (قطبي). Y رقم الإحداثي Y الحالي (كارتيسي) أو المقدار (قطبي). PhaseSync Enum.AnimationNodePhaseSync يحدد ما إذا كان يجب مزامنة توقيت المدخلات الفرعية.
- Synced (افتراضي): مزامنة طبيعية. تحسب العقدة "مدة افتراضية" بناءً على المتوسط المرجح للمدخلات النشطة. يتم تعديل خطوة الوقت لكل عقدة مدخل بحيث تتقارب جميع المدخلات إلى نفس المرحلة، مما يحافظ على الرسوم المتحركة ذات الأطوال المختلفة في تناغم.
- Unsynced: دمج قياسي حيث تتقدم المقاطع بشكل مستقل بمعدلات التشغيل الخاصة بها.
- بيانات الحدث
- معالجة الحدث: تستمع العقدة للأحداث من جميع العقد الفرعية النشطة حاليًا.
- إصدار الحدث: تمر فقط الأحداث من المدخل النشط ذو الوزن الأعلى، مقاسة بواسطة وزن الدمج الخاص به. يتم كتم أحداث المدخل الثانوي.
Mask

تطبق قناعًا محددًا مسبقًا على وضع المدخل. يتم تعريف القناع بواسطة وزن لكل كائن (مثل المفصل) في تسلسل الهيكل، مما يسمح بالتحكم الدقيق أو "تخفيف" الرسوم المتحركة.
- المدخلات
- Pose: وضع الرسوم المتحركة الذي سيتم تطبيق القناع عليه.
- الخصائص
الخاصية النوع الوصف Mask ObjectValue ObjectValue (تم إنشاؤه كطفل مباشر لتعريف عقدة Mask) الذي يحدد أوزان القناع. يمكن أن يعمل بواحد من طريقتين:
- مباشرة: تحتوي ObjectValue نفسها على سمات تربط أسماء كائنات الهيكل بقيم وزن محددة.
- بالإشارة: تشير ObjectValue إلى Instance أخرى تحتوي على سمات الربط. يسمح ذلك بمشاركة الأقنعة عبر عقد مختلفة في الرسم البياني.
عند إنشاء قناع، يمكنك اختيار مخطط هيكل (HumanoidRigDescription أو Picker) لملء التسلسل.
- HumanoidRigDescription: يحدد القناع لشخصيات إنسانية.
- Picker: يسمح للمستخدم باختيار أي هيكل محدد في مساحة العمل لملء تسلسل القناع.
Invert منطقي عندما يكون صحيحًا، يطبق قيم الوزن كـ 1 - الوزن. يسمح ذلك بإعادة استخدام القناع بشكل عكسي دون إنشاء أصل جديد. - بيانات الحدث
- معالجة الحدث: تستمع العقدة لجميع الأحداث من المدخل Pose.
- إصدار الحدث: تمر جميع الأحداث من المدخل Pose دون تعديل.
Speed

تعدل معدل التشغيل لوضع الرسوم المتحركة الوارد.
- المدخلات
- Pose: وضع الرسوم المتحركة أو الرسم الفرعي الذي سيتم تعديل سرعة تشغيله.
- الخصائص
الخاصية النوع الوصف Speed رقم مضاعف يطبق على فرق الزمن (). 0.0 يوقف الرسم البياني، 1.0 هو السرعة الطبيعية، و2.0 هو ضعف السرعة. - بيانات الحدث
- معالجة الحدث: تستمع العقدة للأحداث من المدخل Pose.
- إصدار الحدث: تمر جميع الأحداث من المدخل Pose دون تعديل. لاحظ أنه بينما تتغير سرعة التشغيل المرئية، سيتغير توقيت الأحداث الصادرة (مثل العلامات) وفقًا لمعدل التشغيل المعدل.
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.
النسخ المتماثل
تتكرر معلمات رسم الرسوم المتحركة وحالة العقد الداخلية تلقائيًا. يتم تحديد وضع النسخ المتماثل بواسطة Workspace.AuthorityMode في الوقت الذي يتم فيه إنشاء نص Animate:
- في Enum.AuthorityMode.Automatic: تتكرر المعلمات التي تم تعيينها عبر AnimationTrack:SetParameter() تلقائيًا إلى أقران آخرين.
- في Enum.AuthorityMode.Server: يقود الخادم محاكاة الرسم البياني بالكامل. تتكرر جميع حالات العقد، مثل الوقت المنقضي لـ Enum.AnimationNodeType.ClipNode، ومعلمات الرسم البياني تلقائيًا من الخادم إلى العملاء. يستخدم عميل اللاعب المالك التنبؤ لتشغيل محلي سلس.
نصوص Animate النموذجية
لإنشاء نصوص نموذجية لدفع رسم بياني للرسوم المتحركة لهيكل، استخدم Graph -> Create Animate script في محرر رسم الرسوم المتحركة. ينتج هذا تسلسل نصوص موضوعة تحت StarterCharacterScripts (لشخصيات اللاعبين) أو مباشرة على الهيكل (لـ NPCs):
Animate (ModuleScript)
├── RunClient (LocalScript)
└── RunServer (Script, RunContext = Legacy)تحتوي Animate ModuleScript على منطق تحميل الرسم البياني. تستدعي نصوص RunClient وRunServer ذلك في السياق المناسب. تعتمد النصوص المضمنة على حالة الاستخدام:
| حالة الاستخدام | النصوص المضمنة | السلوك |
|---|---|---|
| NPC (أي وضع) | RunServer | يقوم الخادم بتحميل وتشغيل الرسم البياني. تتكرر الحالة إلى جميع العملاء تلقائيًا. |
| اللاعب + Enum.AuthorityMode.Server | RunServer + RunClient | يقود الخادم الرسم البياني بشكل موثوق. يمكّن العميل المالك Enum.PredictionMode للتنبؤ المحلي القائم على التراجع. |
| اللاعب + Enum.AuthorityMode.Automatic | RunClient | يقوم العميل المالك بتحميل وتشغيل الرسم البياني. تتكرر المعلمات تلقائيًا إلى الخادم والعملاء الآخرين. |
تُخزن الخصائص التالية على نص Animate وتحدد سلوكه:
| الخاصية | النوع | الوصف |
|---|---|---|
| GraphName | سلسلة | اسم أصل رسم الرسوم المتحركة. |
| CharacterName | سلسلة | اسم الهيكل الذي يستهدفه الرسم البياني. |
| SourceAssetId | سلسلة | معرف الأصل المنشور للرسم البياني. يستخدم في وقت التشغيل في الألعاب المنشورة. |
| IsServerAuthority | منطقي | ما إذا كان النص قد تم إنشاؤه مع تعيين Workspace.AuthorityMode على Server. يحدد استراتيجية النسخ المتماثل. |
| PreviewInStudio | منطقي | عندما يكون صحيحًا (افتراضي)، يقوم اختبار اللعب في Studio بتحميل الرسم البياني غير المنشور محليًا حتى تتمكن من التكرار دون نشر. قم بتعيينه على false لاختبار الأصل المنشور في Studio. لاحظ أن هذا غير مدعوم حاليًا في Enum.AuthorityMode.Server. |
نسخ المعلمات في الوضع التلقائي
عندما يكون Workspace.AuthorityMode هو Automatic:
- يقوم العميل المالك بتشغيل رسوم شخصيات اللاعبين؛ يقوم الخادم بتشغيل رسوم NPC.
- تتكرر المعلمات التي تم تعيينها عبر AnimationTrack:SetParameter() تلقائيًا إلى أقران آخرين. يتم دمج مكالمات SetParameter المتعددة ضمن إطار واحد (آخر كاتب يفوز).
- لا حاجة إلى برمجة إضافية لنقل المعلمات - يتولى المحرك النسخ المتماثل داخليًا.
- يرى العملاء الآخرون تحديثات المعلمات مع تأخير صغير (فترة إرسال واحدة بالإضافة إلى زمن الشبكة).
سلطة الخادم
عندما يكون Workspace.AuthorityMode هو Server:
- يكون الخادم هو السلطة لجميع الرسوم البيانية - يقوم بتشغيل المحاكاة ويكرر الحالة الكاملة للرسم البياني.
- ما يتم نسخه: كل من المعلمات وحالة العقد الداخلية، بما في ذلك الوقت المنقضي، الاختيارات الحالية، تقدم الانتقال، عدد الحلقات، وبذور RNG. يضمن ذلك أن يرى جميع العملاء سلوك الرسوم المتحركة المتطابق.
- شخصيات اللاعبين: يقود الخادم الرسم البياني. يقوم نص RunClient الخاص بالعميل المالك تلقائيًا بتمكين Enum.PredictionMode على Animator، بحيث يرى اللاعب المحلي الرسوم المتحركة المتوقعة بسلاسة والتي تتوافق مع الخادم عند عدم التطابق.
- NPCs: يقود الخادم الرسم البياني بشكل حصري؛ يلاحظ العملاء الحالة المكررة دون محاكاة محلية.
دفع المعلمات
استخدم AnimationTrack:SetParameter() من كل نص يقوم بتشغيل الرسم البياني:
- شخصية اللاعب في Enum.AuthorityMode.Server: استدعاء SetParameter من كلاهما RunServer وRunClient. يحتاج الخادم إلى المعلمات لدفع المحاكاة الموثوقة، ويحتاج العميل المالك إلى نفس المعلمات لدفع توقعه المحلي.
- شخصية اللاعب في Enum.AuthorityMode.Automatic: استدعاء SetParameter من RunClient (أو أي LocalScript عميل لديه وصول إلى AnimationTrack).
يتضمن نص Animate المولد كتلة SetParameter مع تعليق كنقطة انطلاق. قم بإلغاء تعليقها وتعديلها لدفع المعلمات من حالة اللعب (سرعة الحركة، حالة الإنسان، اتجاه الإدخال، إلخ).