‫أهلا ومرحبا.
‫في هذه المحاضرة ، سنعرض شاشة فضفاضة وسنقوم بذلك بالكامل
‫من داخل C ++ لإنتاج هذه الأداة.
‫دعنا نتعمق ونرى كيف يتم ذلك.
‫لذلك نود عرض بعض واجهة المستخدم عندما يموت لاعبنا لإخبارهم بما يحدث أنهم فقدوه وأن المستوى
‫على وشك إعادة التعيين.
‫لذلك لا يشكل ذلك مفاجأة لهم.
‫لذلك سنحتاج إلى إنشاء بعض واجهة المستخدم ، أداة واجهة المستخدم ، UMG ، عنصر واجهة مستخدم للرسومات المتحركة غير الواقعية.
‫لذلك دعونا نفعل ذلك أولاً ، عن طريق إنشاء مجلد لتخزين واجهة المستخدم.
‫وأنا أعلم بالفعل أننا سنحصل على عنصرين من واجهة المستخدم ، لذلك أعتقد أنه سيكون لدي مجلد واجهة مستخدم
‫هنا ، ثم دعنا ندخل هنا وننقر بزر الماوس الأيمن ثم ننتقل ، كان يجب عليك فعل ذلك من قبل ، ولكن دعنا " سأرشدك من
‫خلال.
‫سننتقل إلى قسم واجهة المستخدم ، ثم حدد مخطط عنصر واجهة المستخدم
‫والبادئة التي سنستخدمها هي WP السفلية ثم ستفقد الشاشة.
‫يمكنك الآن عمل بعض الفئات الأساسية لهذا النوع من الأشياء في C ++ ، لكننا لن نغطي هذا في
‫هذا القسم.
‫ليس من الضروري بشكل عام القيام بذلك ، ومن الأسهل القيام بهذه الأشياء في Blueprint.
‫لا توجد فائدة كبيرة للقيام بذلك في C ++ ما لم تكن واجهة المستخدم الخاصة بك ستصبح معقدة للغاية
‫وأردت وضع بعض منطق واجهة المستخدم هذا في C ++.
‫في هذه الحالة ، ليس هذا هو الحال ، لذلك يمكننا المضي قدمًا واستخدام المخططات.
‫بعد كل شيء ، واجهة المستخدم هي شيء مرئي.
‫من المنطقي استخدام أداة مرئية لتجميعها الآن لأنك تعرف بالفعل كيفية إنشاء عناصر واجهة المستخدم.
‫ثم سأقدم هذا كتحدي لك لإعداد شاشة خاسرة.
‫نريد إضافة نص يوضح أن اللاعب قد خسر وأننا على وشك إعادة التشغيل.
‫إذا كنت تريد وضع هذا النص بشكل مركزي على الأرجح ، وجعله مرئيًا ، وتأكد من أنه مرئي في اللعبة.
‫ومع ذلك ، كما قلت ، اشرح أنه سيكون هناك استئناف قادم.
‫وبعد ذلك بعد أن حاولت هذا التحدي ، سننظر في كيفية إنتاج هذا من C ++.
‫لقد رأيت ربما كيفية القيام بذلك في Blueprint من قبل.
‫سنرى كيف يمكننا القيام بذلك من داخل C ++.
‫لذا أوقف الفيديو مؤقتًا واذهب.
‫حسنًا ، أرحب بعودتك.
‫لذلك سأذهب وأنشئ ، أولاً وقبل كل شيء ، القليل من النص.
‫لذلك أريد البحث في اللوحة الموجودة على اليسار ، وسأبحث عن عنصر النص وإحضاره.
‫سأقوم بتغييره إلى أنك تفقد حوارًا واضحًا جدًا وغير مبدع في الكتابة هنا وسنقوم بتغيير اللون والتعتيم
‫و / أو المظهر إلى اللون الأحمر لجعل الأمر واضحًا تمامًا أنهم فقدوا.
‫وفركها أكثر قليلاً وسأقوم بتوسيع الخط وتغيير الحجم ليكون أكبر.
‫ثم سأقوم بتوسيع المربع حول النص وسأقوم بتوسيط النص.
‫بالانتقال إلى التبرير ، سأقوم بتوسيط سطر في النص.
‫وإذا توسعت ، فلنرى ما إذا كان هناك مكان آخر يمكنني فيه محاذاة الوسط داخل الملاحظة غير موجودة.
‫لذلك سأذهب وأجعل حجم الصندوق مناسبًا تقريبًا ثم سأنتقل إلى المحاذاة والمراسي
‫وأشياء من هذا القبيل.
‫وسأقوم بتحديد القائمة المنسدلة للمثبتات وتحديد الإعداد المسبق للتثبيت في المنتصف ، لأن هذا ما
‫أريد القيام به.
‫أرغب في ضبط محاذاة على 0. 5 و 0. 5 ، وهو ما يعني في الأساس أننا نحاذي مركز الكائن
‫بدلاً من الزاوية اليسرى العليا.
‫سأقوم بعمل المرساة مرة أخرى.
‫تمام.
‫لم يكن ذلك مفيدًا جدًا.
‫ثم الموضع X لماذا أعتقد أنه إذا قمت للتو بتعيين الموضع بجوار الصفر والصفر لأنني قمت بإعداد نقاط
‫ارتكازي بهذا الشكل ، فإن مركز الخسارة الخاص بي سيكون في مكان ما في المنتصف وسأقوم فقط
‫بتحريكه من أي وقت مضى قليلا جدا.
‫احتفظ بموقعي X عند الصفر ، والموضع Y -50 ، لأنني أريد إضافة بعض النصوص الثانوية التي تقول في الواقع ، قد يكون
‫من الأسهل فقط تكرار النص الآخر هنا لأنه يحتوي على كل الإعدادات التي أحتاجها
‫بالفعل.
‫أريد فقط أن أجعلها أصغر قليلاً.
‫ضع صفرًا مرة أخرى وسأقول أن المستوى سيعيد التشغيل في غضون 5 ثوانٍ وسأجعل حجم الخط أصغر
‫كثيرًا.
‫لذا فهو أقل في وجهك ، شيء من هذا القبيل ، ثم حركه لأسفل قليلاً ، قليلًا
‫واستمر في إعادة تعيين هذا الموضع X إلى الصفر و 100٪ سعيد بالتموضع.
‫سأقوم بتحريكه قليلاً أكثر.
‫إذا ضغطت على مفتاح shift لأسفل ، فيمكنني أن أقفله على المحور الذي أتحرك معه بحيث يكون مركزيًا إلى
‫حد ما.
‫حسنًا ، أنا سعيد بذلك.
‫الآن نحن بحاجة إلى المضي قدمًا ومحاولة إنتاج الشيء.
‫كيف سنقوم بفعل ذلك؟
‫حسنًا ، أولاً وقبل كل شيء ، سنحتاج إلى معرفة فئة الأدوات التي من المفترض أن ننتجها ، ونحتاج
‫إلى معرفة أين سنقوم بذلك من الآن.
‫كما قلت سابقًا ، أعتقد أن مكانًا جيدًا للقيام بذلك هو من وحدة تحكم اللاعب نفسها.
‫وسنحتاج أن نعرف في وحدة تحكم اللاعب أي فئة ، ما فئة الأدوات التي نحاول نشرها؟
‫الآن ، أعلم أنه فصل دراسي ، لكننا لا نزال بحاجة إليه ليكون فصلًا نحاول نشره.
‫لذا فإن الطريقة التي سنقوم بها هي إنشاء خاصية جديدة هنا سيتم تعديلها في أي
‫مكان وسنريد أن تكون هذه فئة فرعية لأن هذه دائمًا طريقة جيدة للتأكد من حصولنا على عنصر جديد
‫صف دراسي.
‫في الأساس ، يمكنك استخدام النوع الذي تدرسه إذا أردت ذلك ، لكن هذا لا يقيد نوع الفصل الذي يمكننا
‫استخدامه.
‫وهنا نريد قصره على كونك تستخدم عناصر واجهة مستخدم فقط.
‫إذا انتقلت إلى مخططك ، يمكنك معرفة ما إذا كنا نذهب إلى مكان ما هنا ، يمكنك أن تجد هناك تذهب.
‫فئة الوالدين هي استخدام عنصر واجهة مستخدم والذي نعرف أنه عندما تضع البادئة عليه يصبح عنصر واجهة مستخدم.
‫إذن فهذه فئة فرعية من.
‫وبعد ذلك نستخدم أقواس الزاوية الخاصة بنا والتي ستكون عبارة عن أداة تستخدم فيها عنصر واجهة مستخدم وسأقوم فعليًا
‫بالتقدم للإعلان عن أن أحدها هنا بدلاً من القيام بأي شيء يتضمن ذلك الفصل الذي تستخدم فيه عنصر
‫واجهة مستخدم ومن ثم سنسمي هذا العنصر الخاسر فئة الشاشة فقط لإبقائها واضحة حقًا ما يحدث هناك.
‫سأقوم الآن بالمضي قدمًا والتجميع في هذه المرحلة أثناء قيامنا بالأشياء التالية لأن التجميع عند تغيير ملف
‫الرأس يستغرق وقتًا أطول قليلاً.
‫الآن في الواقع ستفشل عملية التجميع في هذه المرحلة لأننا لم نقم بتضمين وحدة UMG.
‫نحن لا نعرف كيف نفعل ذلك.
‫لا تقلق بشأن التجميع في هذه المرحلة وفي حوالي 9 دقائق من الفيديو ، سنصلح هذا
‫الخطأ.
‫الآن في C ++ ، ما نريد القيام به هو في الواقع إنتاج هذه الأداة.
‫لذلك سنرغب في القيام بذلك ربما حتى قبل الوقت.
‫لا يهم حقًا لأن المؤقت لا ينتظر.
‫إنه يحدد الوقت فقط ثم ينتقل مباشرة إلى السطر التالي من الكود ، لذلك لن ننتظر 5 ثوانٍ إذا فعلنا
‫ذلك على التوالي ، إذا قمنا بإنشاء واجهة المستخدم مباشرة بعد ذلك ، فلا يهم حقًا الترتيب الذي
‫نقوم به في.
‫لذلك ما نريد القيام به هو استخدام وظيفة تسمى إنشاء عنصر واجهة مستخدم غير متوفر حاليًا.
‫لذلك نحن بحاجة إلى تجزئة تضمين شيء ما أولاً.
‫وما سنقوم بتضمينه هو مخطط مستخدم مائل للأمام ، وهذا هو الفصل الذي نحتاجه للوصول
‫إلى وظيفة إنشاء عنصر واجهة المستخدم هذه.
‫وسنقول بشكل أساسي إنشاء عنصر واجهة مستخدم.
‫يجب أن يكون ، حسنًا ، في الواقع ، دعونا نرى ما نحتاجه لتقديمه.
‫سأذهب إلى F 12 لتنفيذه.
‫يمكنك أن ترى أنه من الصعب بعض الشيء رؤيته ، لكن لدينا معلمة قالب في الأعلى هنا والتي هي أساسًا تستخدم عنصر واجهة
‫مستخدم افتراضيًا ، لذلك ربما لا يتعين علينا توفير ذلك.
‫ثم هناك الكائن المالك والفئة التي نحتاج إلى إنشائها ثم اسم عنصر واجهة مستخدم لا نحتاج بالضرورة
‫إلى توفيره ثم يعود كمؤشر إلى عنصر واجهة المستخدم.
‫إذن ما سأفعله هو هنا ، سنمنحه كائنًا للمالك.
‫الآن فقط أشياء معينة يمكن أن تمتلك الأداة.
‫أحد هذه الأشياء هو في الواقع جهاز تحكم اللاعب ، لذلك يمكننا فقط تمرير هذا.
‫ثم الشيء التالي هو أننا نريد أن نمرر في فئة RT الفرعية الخاصة بك باستخدام عنصر واجهة مستخدم.
‫حسنًا ، لحسن الحظ ، قمنا بالفعل بتكوين ذلك في ملف الرأس حتى نتمكن من المضي قدمًا وتمريره
‫وسأوقف المسافة البادئة عن محاولة إصلاح نفسه بينما لم أضع فاصلة منقوطة في نهاية السطر
‫ثم دعنا نذهب ونلقي نظرة على الأمور الأخرى.
‫حسنًا ، هذا كل شيء.
‫يقوم فقط بإرجاع القطعة في هذه المرحلة.
‫لذا ما يمكننا فعله هو الحصول على مؤشر لك ، واستخدام نجمة القطعة وستكون هذه الشاشة المفقودة.
‫لذلك كان لدينا فئة الشاشة المفقودة.
‫بعد إنشاء الأداة ، تصبح شاشة فعلية فضفاضة.
‫الشيء التالي الذي يتعين علينا القيام به هو جعل واجهة المستخدم هذه مرئية.
‫نقوم بذلك عن طريق إضافته إلى منفذ العرض بلغة غير واقعية.
‫لكن أولاً ، لأننا نضيف إلى منفذ العرض عن طريق استدعاء دالة على الشاشة الزرقاء ، نحتاج إلى التأكد
‫من أنها ليست مؤشر فارغ.
‫لذلك إذا كان فقدان الشاشة لا يساوي مؤشر فارغ ، فلماذا يمكن أن يكون مؤشر فارغ؟
‫بالمناسبة ، هناك تحدٍ ضئيل بالنسبة لك لمعرفة ما إذا كان بإمكانك معرفة سبب انتهاء المطاف بمؤشر فارغ
‫هنا.
‫حسنًا ، أحد الأسباب ربما هو أننا نسينا تعيين فئة الشاشة المفقودة.
‫وإذا كانت هذه هي الحالة ولم يكن لدينا مجموعة فئة شاشة زرقاء صالحة ، فإن إنشاء عنصر واجهة مستخدم سيعيد
‫مؤشرًا فارغًا بالنسبة لنا.
‫ولا نريد أن يحدث ذلك ولا نريد بالتأكيد استدعاء دالة على مؤشر فارغ.
‫لذلك سنفقد سهم الشاشة.
‫ثم ما نريده هنا هو وظيفة تسمى إضافة إلى منفذ العرض.
‫وهو ما سيفعل ذلك تمامًا ، اذهب وأضفه إلى الشاشة حتى نتمكن من رؤية تلك الشاشة السائبة.
‫الآن ، سأقوم بتجميع ذلك أيضًا ، وأذهب إلى بكرة واحدة وافتح مخططنا
‫لوحدة تحكم اللاعب.
‫لذلك وحدة تحكم لاعب مطلق النار هنا.
‫ويجب أن نكون قادرين على رؤية متغير في مكان ما هنا لم يظهر بعد.
‫ربما كان لدي بعض أخطاء البناء.
‫دعنا نذهب ونلقي نظرة على سجل الرسائل.
‫نعم ، يمكننا أن نرى بعض أخطاء البناء هنا ، وبالتحديد هذه الأخطاء الغريبة عن الرموز الخارجية المفقودة.
‫إذا كان لدينا نظرة صغيرة تقول أشياء عنك ، فاستخدم عنصر واجهة مستخدم غير متوفر الآن إذا
‫أعادت رأيك إلى بضع محاضرات سابقًا ، فنحن نعلم أن هذه الأنواع من الأخطاء تميل إلى الظهور عندما نفقد اعتمادًا على الوحدة
‫النمطية.
‫لذلك إذا ذهبنا وفتحنا نقطة بناء نقطة إطلاق النار البسيطة ، وسأغلق المحطة الطرفية لمزيد من المساحة
‫الإضافية ، عندها يمكنك أن ترى ما يتعين علينا القيام به هو إضافة تبعية عامة جديدة هنا.
‫حتى نهاية هذا ، سنضيف تبعية عامة لـ UMG ، لذلك فاصلة جديدة.
‫وبعد ذلك في علامات الاقتباس ، سنضع UMG وهذا يسمح لنا بشكل أساسي بالاستفادة من التضمين الذي كان لدينا هنا
‫، عنصر واجهة مستخدم المخطط المائل للأمام.
‫كل هذه الأشياء موجودة في وحدة منفصلة عن العناصر القياسية المضمنة.
‫لذلك نحن بحاجة للذهاب وإخبار Unreal بأننا نريد استخدام هذه الوحدة في C ++ الخاص بنا.
‫دعنا نمضي قدمًا ونبني ونرى ما إذا كان يعمل.
‫الآن يبدو ذلك ناجحًا.
‫إذا انتقلنا إلى المحرر ورجعنا إلى وحدة التحكم في لعب مطلق النار ، فهناك سبب لا أعتقد أنه قد تم إعادة تحميله
‫بشكل صحيح ، لذلك اضطررت إلى الضغط على compile هنا في المحرر.
‫نعود الآن إلى وحدة تحكم لاعب مطلق النار.
‫في النهاية يمكنك أن ترى أن تفقد فئة الشاشة.
‫يمكننا النقر فوق القائمة المنسدلة هناك والانتقال وتحديد AWP ، ووضع علامة سفلية على الشاشة المفقودة هناك ، والتجميع
‫، والحفظ ، ودعنا نذهب ونقتل أنفسنا.
‫سنطلق النار علينا عدة مرات.
‫فرقعة ، فرقعة.
‫وها أنت ذا.
‫ظهرت شاشة Lou الخاصة بنا لتخبرنا بما يحدث على وشك إعادة تشغيل هذا المستوى في غضون 5 ثوانٍ.
‫وفعلت.
‫نعم هو كذلك.
‫الآن أنت لا تعرف فقط كيف يمكنك إنشاء رسومات UMG ، ولكن أيضًا كيف يمكنك إنتاجها من C ++ بدلاً
‫من Blueprint.
‫في المحاضرة التالية ، سيكون لدينا نظرة أقل تشاؤمًا بشأن الأشياء ونحاول معرفة ما
‫إذا كان بإمكاننا أيضًا إنشاء بعض شروط الفوز لهذه اللعبة.
‫سأراك هناك.