‫أهلا ومرحبا بكم مرة أخرى.
‫نحن الآن جاهزون لبدء التعامل مع مدخلات المستخدم.
‫هذا يعني أننا نرغب في الضغط على مفاتيح لوحة المفاتيح وتحريك الماوس والنقر فوق الماوس ورؤية خزاننا
‫يتفاعل مع هذا الإدخال.
‫الآن ، من أجل القيام بذلك ، نحتاج أولاً إلى الحصول على هذا الإدخال بالفعل وسنبدأ أولاً في القيام
‫بذلك باستخدام تعيينات المحاور.
‫لذلك دعونا نتحدث عن هذا.
‫الآن هنا في المشروع ، دعنا نذهب لتحرير وإعدادات المشروع.
‫وإذا مررنا لأسفل وحددنا الإدخال ، فسنرى ارتباطاتنا هنا.
‫وتحت الارتباطات توجد تعيينات الإجراءات وتعيينات المحاور.
‫سنذهب أولاً إلى تعيينات المحاور.
‫الآن قد يكون لديك بعض الخبرة مع هؤلاء ، لكننا سنأخذ نظرة أعمق قليلاً
‫في ما تفعله وكيف تعمل.
‫لذلك لدينا ثلاثة منهم.
‫وإذا نقرت على سهم القائمة المنسدلة ، سأرى هنا W و SW ويتحدثان عن مفاتيح W و SW على
‫لوحة المفاتيح.
‫يتم تعيين هذه لتعيين محور معين ، والذي يسمى Move Forward.
‫لذلك دعونا نناقش كيفية عمل تخطيط المحور.
‫لذلك رأينا في The Unreal Editor أن لدينا تعيين محور يسمى Move Forward وقد
‫تم تعيين W و SCS لتعيين هذا المحور.
‫فماذا يعني هذا بالضبط؟
‫حسنًا ، في Unreal Engine ، لدينا شيء يسمى تعيين المحور.
‫وتخطيط المحاور هو شيء يعالج كل إطار من اللعبة.
‫تقوم بتعيين مفاتيح لتعيين المحور.
‫في حالتنا ، قمنا بتعيين W و S.
‫ألقِ نظرة الآن بجوار مفتاح W هنا.
‫في عينة لقطة الشاشة الصغيرة الخاصة بي إلى اليمين ، تظهر الرسالة مقياس.
‫وبجانب المقياس يوجد رقم 1. 0.
‫وربما لاحظت بجوار SQ أن المقياس هو -1. 0.
‫إذن فهذه هي القيم التي ستؤثر على تلك المعلومات المدخلة.
‫إليك كيفية عمل تعيين المحور.
‫تقدم خرائط المحور لدينا القدرة على الارتباط بوظيفة في C ++.
‫الآن ، عندما يتعلق الأمر بتعيينات المحور ، إذا قمنا بربط دالة مع تعيين المحور ، فيجب أن
‫تأخذ معلمة إدخال من النوع float حتى نتمكن من إنشاء دالة على حوضنا تسمى MOVE تأخذ عددًا عشريًا.
‫سنسمي فقط قيمة معلمة الإدخال هذه.
‫الآن هناك طريقة لأخذ هذه الوظيفة وربطها بتخطيط محور التحرك للأمام.
‫قال إننا نربط وظيفة النقل بتعيين المحور.
‫لذا فإن كل إطار من نظام إدخال اللعبة Unreal Engine سوف يتحقق لمعرفة ما إذا كنا نضغط
‫على مفتاح W أو المفتاح.
‫وسيقوم بحساب قيمة المحور اعتمادًا على ما إذا كنا نضغط على هذه المفاتيح وكل إطار فردي
‫أم لا.
‫ستقوم باستدعاء هذه الوظيفة التي نحن ملزمون بالتحرك للأمام وتمرير قيمة المحور فيها.
‫كل ما يحدث داخل هذه الوظيفة متروك لنا كمطور C ++.
‫الآن إليكم كيف يعمل.
‫إذا لم نضغط على W أو المفاتيح ، فإن قيمة هذا المحور تساوي صفرًا.
‫لذا فإن وظيفة النقل المرتبطة بتخطيط محور التحرك للأمام تسمى كل إطار فردي والقيمة
‫العائمة التي تم تمريرها هي صفر.
‫لنفترض الآن أننا نضغط على مفتاح W.
‫تم ضبط مقياس W على 1. 0.
‫هذا يعني أن قيمة المحور ستكون 1. 0 وهذا ما يتم تمريره إلى وظيفة MOV.
‫لذلك كل إطار فردي ، يتم استدعاء وظيفة النقل بقيمة 1. 0 مرت.
‫الآن دعنا نقول أننا بدلاً من ذلك نضغط على SRC التي لها قيمة مقياس -1. 0.
‫هذا يعني أنه سيتم استدعاء كل إطار فردي لوظيفة النقل و -1. سيتم تمرير 0.
‫الآن في الحالة التي نضغط فيها على كل من W و S ، تتم إضافة هاتين القيمتين معًا.
‫لذلك نحصل على 1. 0 من الضغط على مفتاح W ونحصل على -1. 0 من الضغط على SRC.
‫الآن كلاهما يلغي بعضهما البعض.
‫لذا ، إذا ضغطنا على كليهما في نفس الوقت ، فسيتم استدعاء وظيفة النقل مع تمرير الصفر.
‫بناءً على مجموعة المفاتيح التي نضغط عليها ، سنحصل على قيمة مختلفة يتم تمريرها
‫إلى وظيفة MOVE الخاصة بنا ويمكننا فعل ما نشاء بهذه القيمة ، مثل استخدامها لتحريك البيدق.
‫سنتحدث عن تحريك البيدق فعليًا قريبًا.
‫في الوقت الحالي ، دعنا نعمل فقط على إعداد أنفسنا فعليًا حتى نتمكن من التعامل مع هذه المعلومات
‫من نظام تعيين المحور.
‫حسنًا ، والآن بعد أن عرفنا كيفية عمل تعيين المحور ، فقد حان الوقت لإنشاء دالة رد نداء
‫يمكننا ربطها بتعيين محور التقدم للأمام.
‫لذا سأغلق إعدادات المشروع وأعود إلى كود VS.
‫لذا هنا في رمز VS ، نود إنشاء وظيفة يمكننا ربطها بتخطيط محور التقدم للأمام.
‫لذلك هنا في الخزان H يمكننا إنشاء وظيفة خاصة.
‫الآن سوف يكون.
‫نوع الإرجاع الباطل ، وأود أن أسمي هذه الخطوة.
‫الآن يحتاج إلى معلمة إدخال عائمة ، وسنسمي هذه القيمة.
‫لذلك دعونا نأخذ وظيفة الحركة الخاصة بنا ونحددها هنا في Tank.
‫CP سوف ألصقه هنا أسفل المُنشئ مباشرةً ونحتاج إلى خزان بمشغل تحليل النطاق قبل
‫اسم الوظيفة.
‫إذن لدينا وظيفة النقل هذه ونحن على استعداد لربطها بتخطيط محور التحرك للأمام.
‫ويتم ذلك داخل وظيفة تسمى مكون إدخال مشغل الإعداد.
‫يجب أن يبدو ذلك مألوفًا.
‫في الواقع ، إذا فتحنا المستكشف الخاص بنا ورجعنا إلى Base Pont H ، فيمكننا التمرير لأسفل ورؤية
‫مكون إدخال مشغل إعداد الوظيفة في القسم العام.
‫سنرى أن هذا تجاوز لوظيفة افتراضية موروثة.
‫الآن لا تحتاج فئة النشر الأساسي إلى إعداد أي مدخلات ، وهذا ما تمثله هذه الوظيفة للتعامل
‫مع المدخلات من اللاعب.
‫الآن ، لا تحتاج فئة الرابطة الأساسية الخاصة بنا إلى التعامل مع الإدخال ، ولكن فئة الخزان لدينا تحتاج إلى ذلك.
‫إذن ما يمكننا فعله هو إخراج هذه الوظيفة من قاعدة البركة h لكنني سأقوم بنسخها لأننا نحتاجها
‫في الخزان.
‫بنسخ هذه الوظيفة ، سأذهب إلى Tank H وهنا في القسم العام سأقوم بلصقها.
‫وبما أننا لسنا بحاجة إليها في البركة الأساسية ، فسأقوم بإزالتها من طبقة البركة الأساسية.
‫وفي الحقيقة سأذهب إلى بركة القاعدة CP وأزلها من هنا أيضًا.
‫لذلك دعونا نمضي قدمًا ونحذف مكون إدخال مشغل الإعداد من Base Pond.
‫CP والآن لم يعد موجودًا في فئة البركة الأساسية.
‫لذلك دعونا نمضي قدمًا ونحفظ التغييرات ونغلق القاعدة Pond H و CP.
‫والآن لدينا عنصر إدخال مشغل الإعداد معلن في Tank H ، لكننا نريد أيضًا تحديده وخزانه.
‫CP حتى هنا في Tank.
‫CP سأضيف التعريف فوق وظيفة النقل مباشرة.
‫إذن هذا باطل وهو مكون إدخال لاعب تم إعداده للدبابة.
‫الآن دعنا نعود إلى Tank H ونرى نوع معلمة الإدخال الخاصة به.
‫سترى أنه تم التصريح للأمام هنا داخل الأقواس.
‫هذا شيء يمكنك القيام به إذا كنت تريد إعادة التوجيه ، والإعلان عن نوع الفصل في ملف الرأس.
‫لذلك تم الإعلان عن إعادة التوجيه هنا ونحتاج إلى إدخال نوع مؤشر المكون ويسمى المعامل
‫مكون إدخال المشغل.
‫لذلك نحن بحاجة إلى معلمة الإدخال هذه في الخزان.
‫CP إذن بين قوسين لمكون إدخال مشغل الإعداد ، سيكون لدينا مكون إدخال
‫U وهو مؤشر ويسمى مكون إدخال اللاعب.
‫الآن توقيع الوظيفة يطابق ذلك في إعلان الوظيفة.
‫الآن مرة أخرى في ملف CP ، دعنا نعطي هذه الوظيفة جسمًا وظيفيًا ونقوم بالكتابة فوق
‫هذه الوظيفة ومن الجيد استدعاء مكون إدخال مشغل الإعداد الفائق.
‫الآن ، نظرًا لأننا نستدعي الإصدار الأصلي من مكون إدخال مشغل الإعداد ، يتعين علينا
‫تمرير إدخال من النوع الذي أدخلته.
‫سنقوم بتمرير معلمة الإدخال إلى هذه الوظيفة هنا.
‫وبهذه الطريقة ، سوف يسمي الفصل الأصلي نسخته.
‫الآن لا يقوم خزان البركة الأساسي بتنفيذ هذه الوظيفة.
‫لقد أزلناه للتو.
‫لكن الفئة الأصل إلى القاعدة - ستستدعي نسختها.
‫وكلما تجاوزت وظيفة افتراضية كهذه ، فإن استدعاء الإصدار الفائق فكرة جيدة.
‫لذلك لا يفوتنا أي وظائف مطبقة في الإصدار الأصلي.
‫فلماذا نفعل هذا؟
‫ما فائدة مكون إدخال مشغل الإعداد؟
‫حسنًا ، أحد الأشياء الجيدة هي وظائف الربط للوصول إلى التعيينات.
‫نرغب في ربط وظيفة النقل الخاصة بنا بتعيين محور التحرك للأمام.
‫ونحن نفعل ذلك هنا.
‫نقوم بذلك باستخدام مكون إدخال مشغل معامل الإدخال هذا.
‫هذا ما صمم هذا الكائن من أجله.
‫نأخذ مكون إدخال المشغل وعلى هذا المؤشر نستخدم مشغل السهم للوصول إلى وظيفة
‫تسمى محور الربط.
‫يأخذ Bind Axis الآن بعض معلمات الإدخال.
‫الأول عبارة عن سلسلة حرفية ، مما يعني أننا سنستخدم ماكرو النص.
‫الآن ماذا نضع في الاقتباسات؟
‫نضع اسم تعيين المحور.
‫رأينا في المحرر أن تعيين المحور هذا يسمى المضي قدمًا.
‫لذلك نحن نختار تعيين المحور لربطه بمعامل الإدخال الثاني.
‫سيكون هذا مؤشرًا للكائن حيث يكون ربط الوظيفة لهذا هو مؤشرًا لمثيل
‫فئة معينة حيث n وبما أننا في فئة الخزان ، فإن هذا سيشير إلى مثيل دبابة
‫البيدق في لعبه.
‫الآن المعلمة الثالثة هي عنوان الوظيفة التي نربطها.
‫لذلك لدينا حركة دبابة.
‫من المهم جدًا أن نحتاج إلى ذلك بشكل كامل.
‫قم بتأهيل اسم الوظيفة باسم الفئة.
‫وهنا أمام اسم الوظيفة ، نحتاج إلى عنوان المشغل.
‫الآن ، إذا لم تكن معتادًا على القيام بشيء كهذا ، فهذا يعني ببساطة أخذ عنوان
‫الوظيفة.
‫يمكن أن تحتوي الوظائف على عناوين تمامًا مثل المتغيرات.
‫لذا فإن استخدام عنوان المشغل هو وسيلة لتمرير الوظائف إلى وظائف أخرى.
‫لهذا السبب نحتاج إلى عنوان المشغل هذا.
‫لذلك لدينا استدعاء وظيفي لربط الوصول.
‫الآن ربما تلاحظ أن مؤشر خطأ IntelliSense يشير إلى نوع فئة غير مكتمل لمكون الإدخال غير
‫مسموح به.
‫الآن نحن نعرف ما يمكن أن يسبب هذا.
‫أولاً ، قد يعني ذلك أننا بحاجة إلى تضمين ملف رأس.
‫الاحتمال الآخر هو أنه خطأ خاطئ.
‫يمكنك معرفة ذلك بسهولة عن طريق التحويل البرمجي ، لذلك دعونا نحاول التجميع.
‫سنرى أن لدينا تجميعًا ناجحًا.
‫لذلك نحن نعلم أن هذا خطأ خاطئ.
‫ولكن مرة أخرى ، إذا أردت ، يمكنك إضافة التضمين فقط لإزالة ذلك.
‫لذلك فهو لا يزعجك.
‫نحن نعلم الآن أن نوع الفصل الذي يشكو منه هو مكون الإدخال.
‫إذن ، ها أنت تدخل المكون في الوثائق وإليكم التضمين.
‫وإذا أضفنا هذا هنا في الجزء العلوي من ملف خزان CP ، فسوف نتخلص من هذا الخطأ الخاطئ المزعج.
‫ومرة أخرى ، نظرًا لأن هذه العناصر تشتمل على عناصر الحماية التي يريدها براغيا ، فإننا نعلم
‫أن مكونات الإدخال لن يتم تضمينها أكثر من مرة وهناك تلاشى التمايل.
‫نعلم الآن أن وظيفة النقل هذه ستسمى كل إطار وستكون للقيمة قيمة تعويم
‫معينة اعتمادًا على ما إذا كنا نضغط على W أو نسأل.
‫الآن ، مجرد معرفة أن وظيفة النقل لا بد أن تمضي قدمًا ليست كافية تمامًا.
‫كمطورين ، من الجيد الحصول على نوع من التأكيد على أن الأشياء تعمل.
‫لذا ، ما أود أن تفعله كتحدي لك هو استخدام سجل YUI في وظيفة MOV لطباعة القيمة التي يتم
‫تمريرها إلى الحركة التي تسمى القيمة العائمة.
‫لذا استخدم النسبة المئوية f في سجل uiy لتسجيل قيمة قيمة الطفو في سجل الإخراج ثم العب واختبر اللعبة واضغط
‫على هذه المفاتيح وشاهد ما ستتم طباعته في السجل.
‫أوقف الفيديو مؤقتًا وأضف هذا إلى وظيفة النقل الآن.
‫تمام.
‫هنا في وظيفة mov ، سأضيف سجل uii.
‫ويمكن أن يكون هذا تحذيرًا مؤقتًا.
‫ولماكرو النص.
‫سأقوم ببساطة بوضع القيمة المئوية F والقيمة.
‫الآن هذا جيد.
‫إذا استخدمت نوعًا مختلفًا من الإسهاب أو التحذير ، إذا كنت تعرف كيفية القيام بهذه الأشياء.
‫هذا جيد تمامًا.
‫سأستخدم تحذيرًا هنا وأعلم أنك استخدمت أشياء مثل النسبة المئوية ونسقت السجل
‫الخاص بك بقيمة سلسلة.
‫النسبة المئوية F ، إذا لم تكن على علم ، هي كيف يمكنك تنسيق سجل واجهة المستخدم الخاص بك بقيمة عائمة.
‫لذلك دعونا نجمع هذا ونعيده إلى المحرر ، سأقوم بفتح سجل الإخراج والضغط على تشغيل والتحقق من ذلك حيث يتم إرسال رسائل
‫غير مرغوب فيها إلى سجل الإخراج برسائل لا حصر لها.
‫سأقوم الآن بالنقر فوق منفذ العرض والضغط على مفتاح W.
‫هناك قيمة خاصة بي للواحد الذي سأطلقه.
‫لقد عاد إلى الصفر.
‫سأضغط على المفتاح وهو سالب واحد.
‫وإذا ضغطنا على كليهما في نفس الوقت ، نحصل على صفر.
‫ولذا فهو بالضبط كما توقعنا.
‫في احسن الاحوال.
‫حسنا.
‫لذلك في هذا الفيديو ، قمنا بإعداد البركة الخاصة بنا للتعامل مع بعض مدخلات المستخدم.
‫تحدثنا عن تعيينات الوصول وربطنا وظيفة النقل الخاصة بنا برسم خرائط الوصول إلى الأمام.
‫قمنا بعد ذلك بطباعة قيمة الوصول هذه باستخدام سجل YUI في وظيفة MOVE الخاصة بنا ، لكننا في الواقع نرغب في نقل الخزان
‫الخاص بنا بدلاً من مجرد طباعة بعض القيم إلى سجل الإخراج.
‫لذلك في المحاضرات القادمة ، سنقوم بإعداده حتى نتمكن بالفعل من البدء في تحريك خزان الوقود.
‫سأراك قريبا.