محرر رسم الرسوم المتحركة

*This content is translated using AI (Beta) and may contain errors. To view this page in English, click here.

يُعد محرر رسم الرسوم المتحركة أداة مرئية قائمة على العقد تمكّن الفنانين التقنيين ومصممي الرسوم المتحركة من بناء منطق رسومي معقد مباشرة داخل Roblox Studio. من خلال توفير واجهة مُبسطة لإنشاء سلوكيات مثل أشجار المزج، فإنه يلغي الاعتماد التقليدي على البرمجة اليدوية لتحريك الشخصيات.

يعمل هذا النظام بالتوازي مع سير العمل الرسومي الحالي لديك:

  • محرر الرسوم المتحركة: استمر في استخدام محرر الرسوم المتحركة كأداة أساسية للمؤلفين لإنشاء مقاطع فردية وتجهيز الإطارات الرئيسية والمنحنيات.
  • محرر رسم الرسوم المتحركة: استخدم مساحة العمل الجديدة هذه لأخذ تلك المقاطع وتنظيمها في شجرة منطقية لدفع سلوكيات اللعب المعقدة.

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

بناء الرسم


لبدء بناء منطق لشخصية قابلة للتحريك، ادخل إلى محرر رسم الرسوم المتحركة عبر علامة التبويب Avatar في شريط أدوات Studio. توضح الخطوات التالية كيفية تهيئة هيكل أساسي وبناء شبكة عقد بسيطة باستخدام الرسوم المتحركة الافتراضية للمشي والمصافحة.

للمزيد من المعلومات حول التطبيقات العملية، يمكنك استكشاف ملف مرجع رسم الرسوم المتحركة والذي يحتوي على أمثلة أساسية ومعقدة للتنفيذ.

لإنشاء رسم الرسوم المتحركة الخاص بك، مشابهًا للمثال الأساسي المقدم في المرجع، استخدم الخطوات التالية:

  1. في Studio، أضف هيكلًا قابلًا للتحريك عبر الانتقال إلى Avatar ثم تحديد CharacterMy Avatar.

    زر الشخصية ممHighlighted في شريط أدوات Studio.
  2. افتح محرر رسم الرسوم المتحركة عبر الانتقال إلى Graph Editor في علامة التبويب Avatar.

    محرر رسم الرسوم المتحركة المشار إليه في شريط أدوات Studio.
  3. اختر الهيكل القابل للتحريك في نافذة العرض ثلاثي الأبعاد واختر إنشاء رسم.

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

    قائمة العقد في قائمة النقر بزر الماوس الأيمن
  5. في عقدة Clip الجديدة، قم بتعيين معرف الرسوم المتحركة.

    1. اختر من القائمة المنسدلة معرف الرسوم المتحركة.

    2. لتقديم معرف أصل الرسوم المتحركة المحدد، انقر على استيراد.

      تم الإشارة إلى حقل في وحدة استيراد الرسوم المتحركة لإضافة معرف الرسوم المتحركة
    3. في حقل معرف الرسوم المتحركة، أضف الرسوم المتحركة الافتراضية للمشي: 507777826.

    4. اختر استيراد.

  6. أضف عقدة Clip أخرى من خلال تكرار الخطوات من 4 إلى 5 باستخدام الرسوم المتحركة الافتراضية للمصافحة: 507770239.

    عقدتا Clip مع معرفات الرسوم المتحركة المعبأة
  7. في محرر الرسم، انقر بزر الماوس الأيمن واختر إضافة.

    إضافة عقدة
  8. قم بتوصيل عقد Clip بعقدة الإضافة عن طريق سحب موصل الإخراج في الزاوية العليا اليمنى إلى المنفذ المناسب:

    1. قم بتوصيل عقدة Clip مع الرسوم المتحركة للمشي إلى المنفذ Base.
    2. قم بتوصيل عقدة Clip مع الرسوم المتحركة للمصافحة إلى المنفذ Additive.
    توصيل كل العقد بعقدة الإضافة
  9. من عقدة الإضافة، قم بتوصيل موصل الإخراج في الزاوية العليا اليمنى إلى المنفذ Pose في مخرج الرسم.

    تم توصيل جميع العقد بعقدة الإخراج النهائية
  10. (اختياري) عيّن معلمة إلى متغير Speed الخاص بك.

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

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

      لوحة المعلمات، عقدة المعلمات، وعقدة clip التي تظهر القيم المشتركة.
  11. اختبر الرسوم المتحركة بالضغط على زر التشغيل.

    رمز زر التشغيل لمعاينة الرسوم المتحركة
  12. حاول اختبار أوزان وسرعات ووضعيات تشغيل مختلفة، والرسوم المتحركة الأخرى. لمزيد من المعلومات حول العقد الفردية، انظر مرجع العقد.

تكامل واجهة برمجة التطبيقات

يُعد إنشاء ونشر رسم الرسوم المتحركة جزءًا من مفهوم الرسوم المتحركة القياسي في 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

عقدة Clip

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

المدخلات
  • لا شيء
الخصائص
الخاصيةالنوعالوصف
Clipمعرف الأصلالأصل الرسومي الذي سيتم تشغيله (مثل rbxassetid://12345).
PlayModeEnum.AnimationNodePlayMode

يحدد سلوك المقطع بمجرد أن يصل إلى نهاية مدته.

  • تكرار (افتراضي): يعيد التشغيل تلقائيًا من البداية بمجرد انتهاء المقطع.
  • تأرجح: يشغل من البداية إلى النهاية، ثم يعيد التشغيل فورًا في الاتجاه المعاكس من النهاية إلى البداية.
  • تشغيل مرة واحدة والانتظار: يعمل مرة واحدة ويحافظ على الوضع النهائي عند الانتهاء.
  • تشغيل مرة واحدة وإعادة الضبط: يعمل مرة واحدة ويعود إلى وضع البداية عند الانتهاء.
ReverseBooleanيتحكم في اتجاه التشغيل.
Speedرقممضاعف لمعدل التشغيل. 0.0 يوقف الرسم، 1.0 هو السرعة الطبيعية، و 2.0 هو سرعة مضاعفة.
TrimBooleanيبدل ما إذا كانت مدة المقطع يجب أن تُقطع.
TrimStartرقمالطابع الزمني المطلق (بالثواني) حيث يجب أن يبدأ التشغيل.
TrimEndرقمالطابع الزمني المطلق (بالثواني) حيث يجب أن ينتهي التشغيل.
بيانات الحدث
  • معالجة الأحداث: لا شيء. هذه عقدة ورقية دون أطفال.
  • إصدار الأحداث: تقرأ العلامات المخصصة المدمجة في مقطع الرسوم المتحركة (مثل "خطوة قدم"، "ضرب سلاح") وتصدرها كأحداث مسماة عند الإطار الدقيق الذي تحدث فيه. إذا تم قطع المقطع، يتم إصدار العلامات فقط ضمن الفقرة المحددة [TrimStart, TrimEnd] (شاملة).

Select

عقدة Select

يختار بين أي عدد من المدخلات عبر خاصية التحديد. كلما تغير الاختيار الحالي، يتم تنشيط الانتقال جديد.

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

PrioritySelect

عقدة Priority Select

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

المدخلات
  • Input1...InputN
    • Trigger (Boolean): شرط منطقي يجب أن يكون صحيحًا لتفعيل هذا الإدخال. في الإصدارات الحالية، يتم توصيل هذا إلى معلمة Boolean.
    • Interruptible (Enum.AnimationNodeInterruptible): يحدد القاعدة التي تحدد متى يمكن قطع الرسوم المتحركة النشطة بواسطة مدخل ذي أولوية أعلى.
      • دائمًا (افتراضي): يمكن قطع الإدخال في أي وقت بواسطة شرط ذي أولوية أعلى.
      • مكتمل: يجب أن تكمل الرسوم المتحركة الحالية تشغيلها قبل أن يتمكن الإدخال ذي الأولوية الأعلى من السيطرة.
      • مؤشر: لا يمكن قطع الإدخال إلا عندما يتم تعيين InterruptibleTrigger على true.
    • InterruptibleTrigger (Boolean): متاح فقط إذا تم تعيين Interruptible على Trigger. يمكن قطع الإدخال عندما تكون هذه التعبير المحدد صحيحة.
الخصائص
الخاصيةالنوعالوصف
DefaultInterruptibleEnum.AnimationNodeInterruptibleقاعدة القاعدة المطبقة على جميع المدخلات. يمكن لكل إدخال تجاوز هذا بقيمته الخاصة من خاصية Interruptible.
DefaultInterruptibleTriggerBooleanالقيمة الأساسية المستخدمة عندما تكون قيمة Interruptible المعينة للإدخال Trigger. يمكن لكل إدخال تجاوز هذا بقيمته الخاصة من خاصية InterruptibleTrigger.
بيانات الحدث
  • معالجة الأحداث: تمر الأحداث من الإدخال المحدد حاليًا دون تغيير وزنها.
  • إصدار الأحداث: تمر جميع الأحداث من الإدخال المحدد حاليًا فقط. خلال الانتقال، يصدر الحدث وفقًا لقواعد الأحداث العالمية.

Sequence

عقدة Sequence

تنشط المدخلات المتصلة بترتيب تسلسلي محدد استنادًا إلى شروط الانتظار المعرفة. كلما تغير الاختيار الحالي، يتم تنشيط الانتقال جديد.

المدخلات
  • Input1...InputN
    • WaitFor (Enum.AnimationNodeWaitFor): يحدد الشرط الذي يجب أن يتم تلبيته قبل الانتقال إلى الإدخال التالي.
      • مكتمل (افتراضي): ينتقل إلى الإدخال التالي عندما تكمل الإدخال الحالي دورة. تعتمد سلوكيات التقدم على الإدخال المتصل:
        • مقطع تشغيل مرة واحدة: ينتقل عند انتهاء المقطع.
        • مقطع تكراري: ينتقل بعد اكتمال دورة كاملة.
        • تسلسل مع دوارات لانهائية: ينتقل بعد دورة كاملة عبر جميع المدخلات.
        • تسلسل مع دوارات لانهائية: ينتقل بعد اكتمال جميع الدورات.
      • 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 فوق نمط Base. عند الجمع مع عقدة Mask، فإن المفاصل المقطوعة في نمط Over تكشف نمط Base بالكامل، مما يخلق تأثير تراكب شفاف.

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

Add

عقدة Add

تضيف نمط Additive إلى نمط Base، ويتم تخفيفه بواسطة Weight معين (غير مقيد).

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

Subtract

عقدة Subtract

تحول الرسوم المتحركة إلى نمط إضافي عن طريق خصم نمط أساسي نسبي من الهدف (ABA - B). يتم تقليل النتيجة بواسطة Weight معين (غير مقيد).

المدخلات
  • A: نمط الرسوم المتحركة المستهدف.
  • B: النمط الأساسي النسبي الذي سيتم خصمه.
الخصائص
الخاصيةالنوعالوصف
Weightرقميحدد قوة تأثير الخصم المطبق على النتيجة.
بيانات الحدث
  • معالجة الأحداث: تستمع العقدة للأحداث من كل من Input A و Input B.
  • إصدار الأحداث: تمر جميع الأحداث من كلا Input A و Input B دون تغيير.

Blend1D

عقدة Blend1D

ت interpolates خطيًا بين وضعي الرسوم المتحركة الأقرب إلى موضع الإدخال الحالي على محور واحد.

المدخلات
  • Input1...InputN
    • Position (رقم): الإحداثي المحدد لكل إدخال لاحق على محور المزج.
الخصائص
الخاصيةالنوعالوصف
Positionرقمالقيمة النشطة الحالية على محور المزج المستخدمة لأخذ عينات الرسوم المتحركة. إذا كانت Position خارج نطاق الإحداثيات المدخلة المحددة، تقوم العقدة بالاستقراء باستخدام أقرب إدخالات.
PhaseSyncEnum.AnimationNodePhaseSync

يضبط ما إذا كانت توقيت المدخلات الفرعية يجب أن يكون متزامنًا.

  • متزامن (افتراضي): تزامن موحد. تحسب العقدة "مدة افتراضية" استنادًا إلى المتوسط المرجح للمدخلات النشطة. يتم ضبط خطوة الزمن لكل عقدة بحيث تتقارب جميع المدخلات إلى نفس المرحلة، مما يحافظ على أنماط الرسوم المتحركة التي تختلف في الطول في تزامن.
  • غير متزامن: مزج قياسي حيث تتقدم المقاطع مستقلًا بمعدلات التشغيل الخاصة بها.
بيانات الحدث
  • معالجة الأحداث: تستمع العقدة للأحداث من جميع العقد الفرعية النشطة حاليًا.
  • إصدار الأحداث: تمر فقط الأحداث من أعلى وزن الإدخال النشط، مقاسة بواسطة وزن المزج الخاص به. يتم إسكات الأحداث من الإدخال الثانوي.

Blend2D

عقدة Blend2D

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

المدخلات
  • Input1...InputN
    • X (رقم): الإحداثي X لكل إدخال لاحق.
    • Y (رقم): الإحداثي Y لكل إدخال لاحق.
الخصائص
الخاصيةالنوعالوصف
InputModeEnum.AnimationNodeBlend2DInputMode

يحدد نظام الإحداثيات المستخدم لتقييم مساحة المزج:

  • كارتسي (افتراضي): يستخدم إحداثيات الشبكة ثنائية الأبعاد القياسية. تمثل X و Y الموضع الحالي داخل مساحة المزج.
  • قطبي: يستخدم القيم الزاوية والمقدار. تمثل X الاتجاه بالراديان، بينما تمثل Y المقدار أو قوة الحركة. الوزن في الاتجاه يكون أكثر أهمية من المقدار، لذا تتمازج المدخلات في زوايا مشابهة ولكن بمقادير مختلفة بشكل أكثر سلاسة من المدخلات بزاوايا مختلفة.
Xرقمالإحداثي X الحالي (كارتسي) أو الاتجاه بالراديان (قطبي).
Yرقمالإحداثي Y الحالي (كارتسي) أو المقدار (قطبي).
PhaseSyncEnum.AnimationNodePhaseSync

يضبط ما إذا كانت توقيت المدخلات الفرعية يجب أن يكون متزامنًا.

  • متزامن (افتراضي): تزامن موحد. تحسب العقدة "مدة افتراضية" استنادًا إلى المتوسط المرجح للمدخلات النشطة. يتم ضبط خطوة الزمن لكل عقدة بحيث تتقارب جميع المدخلات إلى نفس المرحلة، مما يحافظ على أنماط الرسوم المتحركة التي تختلف في الطول في تزامن.
  • غير متزامن: مزج قياسي حيث تتقدم المقاطع مستقلًا بمعدلات التشغيل الخاصة بها.
بيانات الحدث
  • معالجة الأحداث: تستمع العقدة للأحداث من جميع العقد الفرعية النشطة حاليًا.
  • إصدار الأحداث: تمر فقط الأحداث من أعلى وزن الإدخال النشط، مقاسة بواسطة وزن المزج الخاص به. يتم إسكات الأحداث من الإدخال الثانوي.

Mask

عقدة Mask

تطبق قناعًا محددًا مسبقًا على الوضع المدخل. يتم تعريف القناع بواسطة وزن لكل كائن (مثل المفصل) في تسلسل الهيكل، مما يتيح تحكمًا دقيقًا أو "تخفيف" الرسوم المتحركة.

المدخلات
  • Pose: وضعية الرسوم المتحركة التي سيتم تطبيق القناع عليها.
الخصائص
الخاصيةالنوعالوصف
MaskObjectValue

قيمة ObjectValue (تم إنشاؤها كطفل مباشر من تعريف عقدة قناع AnimationNodeDefinition) التي تحدد أوزان القناع. يمكن أن تعمل بعدة طرق:

  • مباشرة: تحتوي ObjectValue نفسها على سمات تطابق أسماء كائنات الهيكل مع قيم وزن محددة.
  • بواسطة مرجع: تشير ObjectValue إلى Instance آخر يحتوي على القيم الخاصة بالوزن. وهذا يسمح باستخدام أقنعة مشتركة عبر عقد مختلفة في الرسم.

عند إنشاء قناع، يمكنك اختيار مخطط هيكل (HumanoidRigDescription أو Picker) لملء الهيكل.

  • HumanoidRigDescription: يقوم بتوحيد القناع للشخصيات البشرية.
  • Picker: يتيح للمستخدم اختيار أي هيكل معين في مساحة العمل لملء الهيكل القائم للقناع.
InvertBooleanعند تعيينها على true، تطبق قيم الوزن كـ 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) كيفية مزج الرسوم المتحركة عند التبديل بين المدخلات النشطة. لتجنب التكرار في مرجع العقد، يتم تعريف هذه السلوكيات من خلال مجموعات خصائص الانتقال القياسية.

الانتقال الافتراضي

الانتقال الافتراضي

سلوك المزج الأساسي المطبق على العقدة كلما انتقلت إلى إدخال نشط جديد.

تجاوز الانتقال

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

النسخ المتماثل

تكون معلمات رسم الرسوم المتحركة محلية لكل AnimationTrack وغير متاحة تلقائيًا للنسخ المتماثل. قد يتغير هذا في التحديثات المستقبلية، لكن النهج الموصى به حاليًا يستخدم:

  • العميل → الخادم: RemoteEvent لإرسال المعلمات من العميل المالك إلى الخادم بمعدل ثابتي.
  • الخادم → عملاء آخرين: سمات المثيل التي تنسخ إلى جميع العملاء تلقائيًا.

شخصيات اللاعبين

يقوم نص العميل بقيادة شخصيات اللاعبين. منذ أن يعرف العميل المالك فقط الحالة الحالية للعب (مدخلات الحركة، حالة الإنسان، إلخ)، يجب أن تتدفق المعلمات من العميل المالك إلى الخادم ثم إلى جميع العملاء الآخرين.

إعداد

تحت 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" -- استبدل بمعرف الرسم المنشور الخاص بك
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.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" -- نفس معرف الرسم كما في العميل
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 هرتز) بالإضافة إلى تأخير الشبكة. يمكنك تقليل فترة النقر من خلال زيادة التكرار (مثل 1/30)، على حساب زيادة حركة الشبكة. 20 هرتز هو افتراضي معقول؛ المزج بين الرسوم متسامح بما يكفي بحيث يكون من الصعب ملاحظة التأخيرات الصغيرة.

©2026 شركة Roblox Corporation. تُعد منصّة Roblox، وشعار Roblox وشعار "توسيع حدود المخيلة"، من ضمن علاماتنا التجارية المسجّلة وغير المسجّلة في الولايات المتحدة وبلدان أخرى.