‫أهلا ومرحبا بكم مرة أخرى.
‫في هذا الفيديو ، سنتحدث عن كيف يمكننا تسريع دبابتنا.
‫نود أن نتحكم بالضبط في السرعة التي يتحرك بها خزاننا.
‫والآن نحن فقط نمرر في متجه موقع دلتا هذا إلى فعل إضافة ، تعويض محلي ، وليس
‫لدينا سيطرة على مدى سرعة تحرك الخزان.
‫إنها في الواقع تتحرك ببطء شديد.
‫لذلك سنقوم بعمل متغير سرعة يمكننا استخدامه للتحكم في هذه السرعة.
‫وسنأخذ أيضًا في الاعتبار معدل عرض الإطارات في لعبتنا لأن لعبتنا تغير معدل عرض الإطارات من إطار
‫إلى إطار.
‫نحن في الواقع لا نحصل على حركة متسقة.
‫لذا لأخذ معدل الإطارات هذا في الحسبان ، سنتحدث عن شيء يسمى دلتا تايم.
‫إذاً نحن هنا في المحرر وإذا قمت بالضغط على زر التشغيل وبدأت في تحريك الخزان ، فهذا ليس شيئًا
‫يمكنك ملاحظته حقًا بالضرورة.
‫لكن خزاننا لا يتحرك بمعدل ثابت من إطار إلى آخر.
‫والسبب هو أن معدل عرض الإطارات لدينا يتغير ويوجد هنا في أعلى يسار منفذ العرض قائمة منسدلة
‫صغيرة.
‫إذا قمت بالنقر فوق ذلك ، فهناك مربع اختيار بجوار إظهار DPS PES يعني الإطارات في الثانية.
‫إذا تحققت من هذا ، فأنا في أعلى اليمين أرى إطاراتي في الثانية.
‫وتحت ذلك ، كم من المللي ثانية مرت منذ الإطار الأخير؟
‫وتتغير هذه القيم من إطار إلى آخر.
‫إذا قمت بالتشغيل ، فربما تكون قد فاتتك ، لكن معدل الإطارات انخفض ثم عادت مرة أخرى لأنه خلال تلك
‫المرحلة الأولى من اللعبة ، كانت تحدث الكثير من الأشياء.
‫كان جميع الممثلين يتصلون بوظائف بدء التشغيل الخاصة بهم وهناك بعض الإعداد وراء الكواليس
‫للعالم.
‫الآن ، إذا بدأت ممارسة اللعبة ، فإن 120 تطبيقًا أحصل عليها تتغير من إطار إلى إطار ، على الرغم
‫من أنها تحوم حول 120.
‫لذا فإن سبب تسبب هذا في حركة غير متسقة هو أنه مع انخفاض معدل الإطارات ، يتم استدعاء تحديثات التجزئة
‫هذه في كثير من الأحيان.
‫وإذا كنا نحرك هذا الخزان بنفس المقدار لكل إطار ، فإننا نعتمد على معدل الإطارات هذا للبقاء
‫متسقًا ، للحصول على تلك الحركة المتسقة.
‫وعندما تصبح اللعبة أكثر تعقيدًا ، فإن الاختلافات في معدل الإطارات ستزداد سوءًا.
‫لذلك نحن بحاجة للتأكد من أننا نتكيف مع ذلك باستخدام شيء يسمى دلتا تايم.
‫إذن ما هو هذا الوقت الغامض في دلتا؟
‫حسنًا ، لنفترض أن لدينا هذا الجدول الزمني هنا يبدأ من 0 ثانية ويزداد مع مرور الوقت.
‫الآن ، مع مرور الوقت ، هذا يعني أنه يتم استدعاء وظيفة التجزئة.
‫لكن لاحظ أن وظيفة القراد ليست متسقة للغاية.
‫في بعض الأحيان يتم استدعاؤه بسرعة كبيرة وفي بعض الأحيان يتم استدعاؤه بشكل أقل.
‫هذا لأن جهاز الكمبيوتر الخاص بك يجب أن يقوم بالحسابات على أساس إطار بإطار ، وفي بعض الأحيان تستهلك هذه الحسابات
‫المزيد من الموارد من جهاز الكمبيوتر الخاص بك ، ويمكن أن يؤدي ذلك إلى إبطاء معدل الإطارات لدينا.
‫الآن ، متغير دلتا الزمني هذا الذي لدينا في دالة التجزئة هو مقدار الوقت المنقضي
‫منذ الإطار الأخير.
‫لذلك قد يكون هنا 0. 1 ثانية.
‫يعتمد الأمر حقًا على استخدام وحدة المعالجة المركزية وكيف يختلف ذلك.
‫لذلك ، نظرًا لاختلاف استخدام وحدة المعالجة المركزية لديك ، فإن وقت دلتا الخاص بك سيختلف أيضًا.
‫وهذا يعني أنه عندما يكون لدينا إطارات أكثر في الثانية ، يكون لدينا المزيد من استدعاءات الوظائف.
‫الآن ، إذا كنا نسمي إضافة عامل إزاحة محلية في كثير من الأحيان ، فسنرى بركتنا تتحرك بشكل
‫أسرع ولن يكون لها معدل حركة ثابت.
‫لذا فإن الحل هو قياس الحركة حسب توقيت دلتا.
‫لذلك إذا كان وقت دلتا هو 0. 1 ونريد تحريك البركة بمقدار 10 سنتيمترات في الثانية
‫على سبيل المثال ، مع زيادة تلك الحركة بمقدار 0. 1 ثانية تعطينا المقدار الدقيق للحركة التي نحتاجها لوقت تحديث
‫الإطار 0. 1 ثانية.
‫الآن ضع في اعتبارك هذا الجزء هنا حيث لدينا وقت دلتا أصغر ، مما يعني أنه يتم استدعاء TIC في كثير من الأحيان.
‫لنفترض أن وقت دلتا هنا هو 0. 0 1 ثانية.
‫لذلك يتم استدعاء TIC أكثر من عشر مرات هنا.
‫حسنًا ، يمكننا ببساطة قياس حركتنا بمقدار 0. 01 لهذا الإطار بالذات ، وبهذه الطريقة سنحرك البركة
‫بمقدار 10 سنتيمترات في الثانية ، 0. 0 1 ثانية.
‫لذلك نحن نقوم بنقل البركة بمقدار ضئيل حيث يتم استدعاء TIC بشكل متكرر.
‫يضمن القيام بذلك أن البركة الخاصة بنا ستتحرك بطريقة متسقة مستقلة عن التغييرات في معدل الإطارات.
‫لذا بالعودة إلى كود VSE ، دعنا نفكر في الطريقة التي نحب أن نتعامل بها مع هذه المشكلة.
‫لدينا متجه موقع دلتا الخاص بنا ونحدد قيمة x الخاصة به ، لكننا نعلم أننا نرغب في قياس
‫القيمة حسب وقت دلتا.
‫لذا سأضع تعليقًا صغيرًا هنا وأقول أن X تساوي قيمة مرات ، ووقت دلتا ، مما يعني أننا نرغب في قياس
‫القيمة حسب زمن دلتا.
‫الآن بمجرد القيام بذلك ، سنجعل القيمة صغيرة جدًا لأن وقت دلتا بحد ذاته قيمة صغيرة جدًا ، خاصةً
‫إذا كان معدل عرض الإطارات لديك مرتفعًا جدًا.
‫لذا سنحتاج أيضًا إلى قياس هذا بشيء ما.
‫عدا ذلك ، نوع من متغير السرعة ، ويمكننا أن نقرر ما يجب أن تكون عليه هذه القيمة من أجل التحكم في سرعة
‫الخزانات.
‫لذلك لدينا القليل من الشفرة الزائفة هنا لإرشادنا ونحتاج الآن فقط إلى تنفيذ ذلك من خلال إنشاء
‫قيمة للسرعة ومعرفة كيف يمكننا الحصول على هذه القيمة الزمنية للدلتا.
‫لذلك دعونا نتحدث عن كيفية الوصول إلى Delta Time من وظيفة النقل.
‫الآن ، لدى Unreal Engine طرق متعددة للحصول على وقت دلتا.
‫في الواقع ، إذا نظرت إلى وظيفة التجزئة التي لدينا في الأساس على دلتا ، فإن الوقت هو معامل إدخال عائم.
‫لذلك إذا كنا نعمل في وظيفة التجزئة ، فلدينا بالفعل إمكانية الوصول إلى Delta time ، ولكن في خزان DHCP
‫، لا تحتوي وظيفة النقل لدينا على معلمة الإدخال هذه ، ولكن المحرك غير الحقيقي له طرقه.
‫تتمثل إحدى الطرق في الوصول إلى وظيفة تسمى الحصول على ثواني دلتا العالمية ، والتي توجد في فئة تسمى احصائيات اللعب
‫على شكل حرف U.
‫كما يوحي الاسم ، فإن لعبة statics تلعب الكثير من الوظائف الثابتة التي تساعد في برمجة اللعب.
‫الحصول على World Delta seconds بإرجاع وقت دلتا.
‫الآن لديها معلمة إدخال.
‫هنا يأخذ كائن سياق عالمي.
‫سترى هذا كثيرًا في Unreal Engine.
‫سيتطلب الكثير من الوظائف الثابتة كائن سياق عالمي.
‫العالم كائن من نوع عالمك.
‫إنه هدف المستوى الأعلى في لعبتنا.
‫إنها تمثل خريطتنا التي تحتوي على جميع الكائنات المرتبطة في لعبتنا.
‫الآن الوظائف الثابتة مثل الحصول على ثواني دلتا العالمية ليس لديها فكرة عن العالم الذي نحن فيه.
‫نحتاج إلى إخبار هذه الوظيفة بالعالم الذي نعيش فيه حتى تتمكن من الوصول إلى هذا العالم والحصول على قيمة دلتا
‫الزمنية.
‫الآن ، من أجل إخباره بالعالم الذي نحن فيه ، يمكننا تمرير مؤشر إلى كائن موجود في ذلك
‫العالم.
‫أثناء عملنا في فصل الدبابات ، يمكننا تمرير الكلمة الأساسية هذه.
‫هذه كلمة أساسية يمكننا استخدامها داخل أي فئة في C ++.
‫ما هي هذه الكلمة الرئيسية ، هو مؤشر إلى مثيل أي كائن معين نعمل فيه.
‫لذا إذا كنا نعمل في فئة الخزان ، فهذا مؤشر على الخزان الذي نحن فيه.
‫لذا فإن الوظائف التي تتطلب كائن سياق عالمي يمكن أن تتلقى هذا غالبًا كمعامل إدخال لأن الخزان
‫الذي نعمل فيه موجود في العالم الصحيح.
‫لذا ، فإن الحصول على ثواني دلتا العالمية سيعرف في أي عالم يوجد فيه ويمكنه أن يستعيد لنا الدلتا المناسبة.
‫حان الوقت لذلك العالم.
‫لذا إذا كنا نطلب الحصول على ثوانٍ من دلتا العالم من داخل - الفصل ، فسنقوم بتمرير
‫هذا ككائن سياق عالمي.
‫إذن لديك الآن كل الأدوات التي تحتاجها للتحكم في سرعة الدبابات.
‫إذن ما ستفعله هو إنشاء متغير سرعة ، وجعله عائمًا ، ووضعه في قسم
‫خاص في فئة الخزان.
‫الآن قم بتعريض هذا للمخططات حتى نتمكن من تعديله أثناء تطويرنا ، مما يعني
‫أنك ستمنحه خاصية لك واستخدام محددات الخصائص المناسبة لك والتي تتوافق مع مستوى
‫التعرض الذي تريده.
‫الآن في وظيفة MOV ، لدينا هذا الجزء من الشفرة الزائفة التي وضعناها كتعليق.
‫لذا استخدم ذلك كدليل.
‫ستأخذ موقع دلتا ، متجه F ومقياس.
‫إنه X بتوقيت دلتا.
‫لقد رأينا للتو كيف يمكننا الوصول إلى وقت دلتا باستخدام إحصائيات طريقة اللعب على شكل U.
‫وستقوم أيضًا بقياس X بواسطة متغير السرعة.
‫الآن ، نظرًا لأننا نستخدم وظيفة في إحصائيات اللعب ، فستحتاج إلى تضمين ملف الرأس
‫لإحصائيات اللعب.
‫لقد أوضحت لك الآن عدة مرات كيف أجد التضمين لفئة معينة باستخدام وثائق المحرك غير
‫الواقعية.
‫لذلك سوف أتحداك للبحث عن إحصائيات اللعب الخاصة بك في وثائق Unreal Engine والعثور
‫على ملف الرأس هذا.
‫وإذا لم تتمكن من العثور عليه ، فما عليك سوى العثور على الرابط في الموارد الخاصة بهذا الفيديو ، والذي
‫سيعطيك وثائق لإحصائيات اللعب الخاصة بك ولكن حاول العثور عليه بنفسك.
‫قم أولاً بإيقاف الفيديو مؤقتًا وتحكم في سرعة الخزان الآن.
‫تمام.
‫لذلك لدي الكود الزائف لإرشادي وأحتاج إلى قياس القيمة حسب وقت دلتا والسرعة.
‫لذلك سأقوم أولاً بإنشاء متغير السرعة الخاص بي.
‫الآن مرة أخرى في الخزان h.
‫هنا حيث يمكنني وضع متغير السرعة.
‫ومع ذلك ، إذا كنت ستتذكر من تمرين تدريبي في محاضرة سابقة ، فقد أضفت تعويمًا يسمى Speed إلى
‫فئة Base Pond.
‫الآن لست بحاجة إلى متغير السرعة هنا في البركة الأساسية.
‫كان هذا مجرد تدريب ، لذلك لا أحتاجه هنا حقًا.
‫في الواقع ، لست بحاجة إلى هؤلاء الثلاثين الآخرين الذين قمت بإنشائهم لإثبات أنك محددات الملكية.
‫لذلك سأقوم فقط بتمييز كل هذه الأشياء وحذفها من فئة البركة الأساسية.
‫لا أريدهم بعد الآن.
‫لذلك ذهبوا.
‫الآن ، قد تتذكر أيضًا أنني أشرت إلى متغير السرعة هذا في مخطط خزان البركة.
‫لذلك سأقوم بفتح خزان بركة BP.
‫وهنا في الرسم البياني للحدث ، هناك متغير السرعة الذي أشرت إليه.
‫نظرًا لأنني لم أعد بحاجة إلى هذا بعد الآن ، فسأمضي قدمًا وأحذف تلك العقد وأجمع خزان بركة
‫BP الخاص بي وحفظه.
‫تمام.
‫بعد تنظيف كل ذلك ، سأعود إلى الخزان لإضافة متغير السرعة.
‫وسيكون هذا في القسم الخاص هنا.
‫سأضيفها فوق وظيفة الحركة مباشرة وستكون عوامة تسمى السرعة.
‫الآن سأعطيها قيمة أولية هنا.
‫أعتقد أنني سأحاول 200 فهرنهايت وأرى كيف يعمل ذلك.
‫ولكن نظرًا لأنني أرغب في أن أكون قادرًا على تحرير هذا في المحرر أثناء تطويره ، فسيحصل على خاصية ماكرو جديدة
‫للخاصية وأود أن أكون قادرًا على تحرير هذا في المثيلات والإعدادات الافتراضية.
‫لذا سأقوم بتحريره في أي مكان.
‫الآن ، ليس عليك القيام بذلك ، لكني أعطيها فئة.
‫سأقوم بإنشاء فئة جديدة تسمى الحركة.
‫الآن تعريضه للرسم البياني للحدث اختياري.
‫سأقوم بتأجيل ذلك لأنني لا أعتقد أنني سأحتاج إلى الوصول إليه في الرسم البياني للحدث.
‫إذا احتجت إلى ذلك.
‫في المستقبل ، يمكنني أن أعرضه بمخطط أو قراءة أو كتابة أو مخطط للقراءة فقط واستخدام تلك التعريفات التي تسمح
‫بالوصول الخاص الذي تحدده.
‫لكن في الوقت الحالي لن أفعل ذلك.
‫إذن لدي متغير سرعة وهنا في الخزان DHCP ، سأأخذ القيمة وأقيسها بالسرعة.
‫الآن آخر شيء يجب فعله هو قياس القيمة حسب وقت دلتا مما يعني أنني بحاجة إلى إحصائيات اللعب.
‫إذن ها هي وثائق Unreal Engine.
‫سأقوم بالبحث عن احصائيات اللعب وها هي احصائيات اللعب.
‫لذلك أنا فقط بحاجة إلى التمرير لأسفل إلى سطر التضمين ونسخ هذا والعودة مرة أخرى في الخزان CP.
‫يمكنني لصقها.
‫الآن بعد أن أصبح بإمكاني الوصول إلى إحصائيات اللعب الجديدة ، يمكنني الحصول على وقت دلتا لذا سأضرب بواسطتك.
‫تحصل احصائيات اللعبة على ثواني دلتا للعالم وكما رأينا ، هذا يحتاج إلى كائن سياق عالمي.
‫يمكنك حتى أن ترى مع النافذة المنبثقة أنها تطلب كائن سياق عالمي.
‫لذلك سأقوم بتمرير هذا.
‫والآن بعد أن قمت بتعيين مواقع دلتا X على قيمة الأوقات والسرعة والأوقات ووقت دلتا ، سأقوم بتجميع
‫هذا.
‫لذلك لدينا تجميع ناجح.
‫لذا بالعودة إلى المحرر هنا ، يمكنني الذهاب إلى BP Pond Tank وهناك سرعاتي هناك.
‫وإذا قمت بتحديد مثيل الخزان في العالم ، يمكنني البحث في لوحة التفاصيل عن الحركة وهناك
‫السرعة ويمكنني ضبطها على أي قيمة أحبها.
‫إذا رفعت هذا الأمر وضغطت على التشغيل ، فأنا أتحرك بشكل أسرع قليلاً.
‫إذن فهذه ميزة تعريض المتغير للمخططات.
‫يمكنني التجربة والعثور على سرعة جيدة تناسبني.
‫حسنًا ، هذا يبدو رائعًا.
‫سأقوم بالمضي قدمًا وأوقف عرض FPSO الآن.
‫والآن لدينا متغير السرعة ويمكننا تغييره.
‫وهذا التغيير سينعكس على حركة بيدقتي.
‫لذلك نحن الآن نتحكم في سرعة حركة خزاننا ولدينا متغير سرعة لطيف نعرضه
‫للمخططات ويمكننا ضبط ذلك أثناء تطوير تجربة بقيمتها.
‫لقد تعلمنا أيضًا عن وقت دلتا ولماذا من المهم توسيع نطاق حركتنا حسب توقيت دلتا.
‫لذا فهو معدل الإطارات مستقلاً حيث أن تغيرات معدل الإطارات ستستمر في الحصول على حركة سلسة ومتسقة مع الخزان
‫الخاص بنا.
‫إذا نظرنا إلى خطة القسم الخاصة بنا ، فقد انتهينا تقريبًا من النقطة الأولى.
‫لقد أنشأنا دبابة ويمكنها التحرك في جميع أنحاء العالم.
‫النقطة الثانية لدينا هي التعامل مع الإدخال بحركة لوحة مفاتيح WASD وإدخال الماوس أيضًا.
‫لدينا جزء W و SW هذا لأسفل ، لكننا ما زلنا بحاجة إلى أن نكون قادرين على استخدام المفتاحين A و D وسنستخدمهما
‫لتدوير الخزان.
‫لذلك نحن نحقق تقدمًا جيدًا في مقاطع الفيديو القادمة.
‫سنعمل على إنهاء قدرتنا على تحريك الخزان.
‫سأراك قريبا.