برنامج Unity Cinemachine والجدول الزمني التعليمي
Cinemachine عبارة عن حزمة لـ Unity تمنح المطورين تحكمًا احترافيًا في الكاميرا وتعزز القدرة على إنشاء مشاهد سينمائية.
سيغطي هذا البرنامج التعليمي المواضيع التالية:
- تركيب السينما
- إعداد كاميرا الشخص الثالث
- إنشاء مشهد الخط الزمني
تركيب السينما
لتثبيت Cinemachine، اتبع الخطوات التالية:
- في Unity انتقل إلى Window -> Package Manager
- تغيير الحزم إلى "Unity التسجيل"
- حدد "Cinemachine" من القائمة ثم انقر "Install"
جهاز السينما جاهز الآن للاستخدام.
إعداد كاميرا الشخص الثالث
سأوضح أدناه كيفية إعداد كاميرا من منظور شخص ثالث باستخدام الكاميرا الافتراضية الخاصة بـ Cinemachine.
الكاميرا الافتراضية هي نسخة خفيفة الوزن من كاميرا Unity، ولا يتم عرضها بمفردها، ولكنها تُستخدم فقط كنقطة مرجعية للكاميرا الرئيسية.
كمثال لهذا البرنامج التعليمي، سأستخدم وحدة تحكم من منظور الشخص الثالث، باستثناء عدم إعداد تصادم الكاميرا ودون تحريك الكاميرا داخل التسلسل الهرمي للمشغل:
كما ترون اللاعب يتحرك ولكن الكاميرا لا تتبعه.
يعد إعداد كاميرا منظور الشخص الثالث باستخدام Cinemachine أمرًا سهلاً للغاية:
- انتقل إلى GameObject -> Cinemachine -> Virtual Camera لإنشاء كاميرا افتراضية جديدة
- قم بتسمية الكاميرا الافتراضية "TPS Camera"
- حدد كاميرا TPS وفي CinemachineVirtualCamera قم بتعيين متغير المتابعة (في حالتي سيكون كائن "CameraParent"، والذي يقع داخل التسلسل الهرمي للمشغل ويمثل دوران المظهر الرأسي)
- اضبط قيمة الجسم على "3rd Person Follow"
- قم بتعيين تجاهل العلامة على "Player" وحدد أيضًا كائن جذر المشغل وقم بتعيين علامته على "Player" (إذا كان هناك أي مصادمات فرعية في التسلسل الهرمي للمشغل، فتأكد من تغيير علاماتها إلى "Player" أيضًا)
- قم بتعديل القيم الأخرى في CinemachineVirtualCamera مثل مسافة الكاميرا، وجانب الكاميرا، وإزاحة الكتف، والتخميد حتى تشعر بالرضا عن النتيجة.
- قم بتعيين قيمة الهدف لـ CameraParent على "Do nothing"
يجب أن تتبع الكاميرا الآن اللاعب:
إنشاء مشهد الخط الزمني
سأوضح هنا كيفية إنشاء مشهد سينمائي باستخدام Unity's Timeline.
الجدول الزمني هو محرر مدمج يمكّن المطورين من إنشاء مشاهد من خلال تحريك الكاميرا، وكذلك باستخدام الرسوم المتحركة الموجودة (مثل مشي الشخصية)، بالإضافة إلى الأحداث والإشارات من خلال ترتيبها بطريقة تسلسلية.
تضيف حزمة Cinemachine بعض الخيارات الإضافية إلى محرر الجدول الزمني، مثل القدرة على التبديل بين الكاميرات الافتراضية.
لإنشاء مشهد مقطعي، اتبع الخطوات التالية:
- قم بإنشاء GameObject جديد وقم بتسميته "TimelineManager"
- افتح نافذة الجدول الزمني بالانتقال إلى نافذة -> التسلسل -> الجدول الزمني
- حدد "TimelineManager" Object وفي نافذة Timeline، يجب أن ترى خيارًا لإنشاء مكون Director وأصل Timeline، انقر فوقه.
- بعد إنشاء مكون المخرج وأصل المخطط الزمني، يجب أن تشاهد نافذة المخطط الزمني الفارغة (تأكد من تحديد كائن TimelineManager لتتمكن من تحريره).
- يمكننا الآن البدء في إضافة مكونات إلى المخطط الزمني عن طريق النقر بزر الماوس الأيمن على النافذة.
كما ترون، تحتوي نافذة الجدول الزمني على خيارات مختلفة:
- مجموعة المسار - هذه مجموعة يمكن أن تحتوي على إجراءات الجدول الزمني وهي مفيدة للتنظيم.
- مسار التنشيط - يحدد الكائن الذي يجب أن يكون نشطًا فقط خلال إطار زمني محدد.
- مسار الرسوم المتحركة - سيؤدي هذا إلى تشغيل رسم متحرك محدد خلال إطار زمني محدد.
- المسار الصوتي - سيؤدي هذا إلى تشغيل صوت محدد خلال إطار زمني محدد.
- مسار التحكم - مسار تتحكم مقاطعه في العناصر المرتبطة بالوقت في GameObject.
- مسار الإشارة - يسمح هذا بتنفيذ مجموعة واسعة من الإجراءات على كائن لعبة معين في وقت محدد (على سبيل المثال، تنشيط البرنامج النصي لحركة اللاعب أو استدعاء وظيفة محددة عندما يصل المخطط الزمني إلى إطار معين، وما إلى ذلك)
- المسار القابل للتشغيل - مسار تكون مقاطعه قابلة للتشغيل بشكل مخصص.
- Cinemachine Track - يسمح هذا بالدمج بين العديد من الكاميرات الافتراضية الخاصة بالسينماشين.
لغرض هذا البرنامج التعليمي، سأستخدم فقط Animation Track و Signal Track.
يثبت
- أنشئ كاميرا افتراضية أخرى وسمها "CutsceneCamera" واضبط قيمتها "Priority" على مستوى واحد أعلى من "TPS Camera" (مثال 11)
- انقر بزر الماوس الأيمن في عرض المشروع -> إنشاء -> سيجنال وقم بتسميته "DisablePlayer"
- قم بتكرار الإشارة "DisablePlayer" وأعد تسميتها إلى "EnablePlayer"
- قم بإنشاء GameObject جديد في المشهد وقم بتسميته "SignalReceiver"
- قم بإرفاق مكون SignalReceiver بكائن "SignalReceiver"
- انقر على "Add Reaction" مرتين
- قم بتعيين "DisablePlayer" للتفاعل الأول و "EnablePlayer" للتفاعل الثاني
"DisablePlayer" سيتم تنشيط كاميرا المشهد، وإلغاء تنشيط كاميرا المشغل وبرنامج التحكم في اللاعب، وسيتم وضعها في بداية المخطط الزمني.
"EnablePlayer" سيتم إلغاء تنشيط كاميرا المشهد، وتنشيط كاميرا المشغل وبرنامج التحكم في اللاعب، وسيتم وضعها في نهاية المخطط الزمني.
- انقر فوق (+) لإضافة فتحة رد فعل ثم قم بتعيين الكائن الذي يلزم تنشيط/إلغاء تنشيط البرنامج النصي أو المكون الخاص به.
نصيحة: لإنشاء إشارة معاكسة، يمكنك فقط إعداد التفاعلات لـ "DisablePlayer" ثم النقر على أيقونة الترس -> تكرار، وتغيير الإشارة إلى "EnablePlayer" وعكس مربعات الاختيار.
- حدد كائن "TimelineManager" ثم في نافذة الجدول الزمني أضف مسار إشارة جديدًا بالنقر بزر الماوس الأيمن -> مسار الإشارة ثم قم بتعيين كائن "SignalReceiver" إليه.
- قم بسحب وإسقاط أصل الإشارة "DisablePlayer" في بداية المخطط الزمني و"EnablePlayer" إلى الإطار الذي تريد أن ينتهي فيه المشهد:
سيؤدي هذا إلى إلغاء تنشيط البرنامج النصي لوحدة التحكم في المشغل والكاميرا في البداية ثم إعادة تنشيطهما بمجرد وصول المخطط الزمني إلى النهاية.
وأخيرًا، سنقوم بإنشاء رسوم متحركة بسيطة بالكاميرا.
- انقر بزر الماوس الأيمن على الجدول الزمني -> مسار الرسوم المتحركة ثم قم بتعيين "CutsceneCamera" (سيطلب هذا إضافة مكون Animator إلى الكائن إذا لم يكن هناك أي شيء)
- انقر فوق زر التسجيل
- حرك "CutsceneCamera" قليلاً، بحيث يتم تطبيق الإطار الرئيسي ثم حرك مقبض الإطار الزمني إلى النهاية، وأخيرًا، حرك الكاميرا إلى موضع جديد ثم انقر فوق إيقاف التسجيل.
لنضغط على زر التشغيل ونرى النتيجة:
يتم لعب المشهد في بداية اللعبة.