‫أهلا ومرحبا.
‫في هذه المحاضرة ، سوف نفهم الخطوات الرئيسية التي ينطوي عليها تجميع ملفات C ++ في Unreal.
‫دعونا نتعمق ونرى كيف تعمل.
‫لذلك سيحين الوقت قريبًا لبدء استخدام التعليمات البرمجية من الخارج ، من الملفات الأخرى ، ونحتاج
‫إلى معرفة كيفية عمل ذلك في C ++.
‫للقيام بذلك ، نحتاج إلى اتخاذ منعطف بسيط وفهم بمزيد من التفصيل ما
‫يحدث عندما نقوم بتجميع كود C ++ الخاص بنا إلى نظام ثنائي.
‫إذن هذه هي خطوات التجميع المستخدمة.
‫نبدأ بالكود الخاص بك ، ملفات C ++ الخاصة بك ، ملفات الرأس الخاصة بك ، كل ذلك في ملفات نصية مختلفة.
‫يتم إدخالها في أداة تسمى Unreal Header Tool.
‫الآن ، هذه الأداة مسؤولة عن أخذ جميع أجزاء بناء الجملة المحددة غير الواقعية واستخدامها
‫لإنشاء المزيد من كود C ++.
‫لذلك دعونا نلقي نظرة على بعض الأمثلة على المكان الذي حصلنا فيه على هذا التركيب النوعي غير الواقعي
‫، هذه الفئة الجديدة بالأحرف الكبيرة التي هي بناء جملة محدد غير واقعي ، وكذلك هو الشيء Crypt Reader API هنا والجسم الذي
‫تم إنشاؤه هناك.
‫وما يحدث هنا بشكل أساسي هو أن أداة الرأس غير الواقعية سترى هذه الأجزاء المختلفة من بناء الجملة في التعليمات البرمجية الخاصة
‫بك وتذهب ، حسنًا ، أحتاج إلى القيام بعملي.
‫أنا بحاجة للذهاب إلى هناك ، ولست بحاجة لإضافة مجموعة من الأشياء.
‫سيحل محل جسمك الذي تم إنشاؤه بمجموعة من التعليمات البرمجية التي تجعل حياتنا أسهل عند استخدام
‫Unreal.
‫كما أنه يقوم بأشياء مثل خصائص U والوظائف الجديدة.
‫يضيف كل الأشياء التي يحتاجها حتى يتمكن من التواصل مع عالم المخطط.
‫إذن هذه هي الخطوة الأولى.
‫يقوم بتحويل جميع الأشياء المحددة غير الواقعية إلى C ++ الفعلي.
‫بمجرد حصولنا على C ++ الفعلي ، يمكننا بعد ذلك إدخاله في عملية تجميع C ++ قياسية ، والتي تستغرق
‫ثلاث خطوات.
‫الأول هو التعامل مع خطوة المعالجة المسبقة بحيث يمكن أن يلمس هذا فعليًا أيًا من بناء جملة C ++ ويتعامل في الواقع
‫فقط مع الخطوط التي تبدأ بعلامة تجزئة.
‫إذن لدينا عدد قليل من توجيهات المعالجة المسبقة هذه.
‫يتم التعامل مع هذه من قبل المعالج.
‫الخطوة التالية هي ما نسميه بالفعل المترجم.
‫يأخذ رمزًا ويحوله إلى ثنائي قابل للتنفيذ ، لكنه لا يكمل الخطوة تمامًا لأنه يفعل
‫ذلك فقط على C ++ الفردية ، ما يعرف بوحدات الترجمة ، بشكل أساسي ملفات C ++.
‫لذلك يأخذ ملف C ++ ويترجم ذلك إلى ثنائي فردي ، كل ملف C ++ فردي.
‫ثم الخطوة الثالثة هي الرابط ، الذي يجمع كل ذلك معًا ويخرج ملفًا تنفيذيًا يمكننا
‫بالفعل تشغيل ملف تنفيذي واحد.
‫لذلك دعونا نلقي نظرة على خطوات التجميع القياسية هذه بمزيد من التفاصيل مع
‫ملف مثال.
‫تخيلوا أن لدينا لعبة.
‫CP وهي لعبة بسيطة جدًا جدًا لأن كل ما تفعله هو إضافة واحد وواحد معًا ، ولكن لإضافة
‫واحد وواحد معًا يجب استخدام دالة معلنة في ملف مختلف في الرياضيات.
‫ح هكذا تعلن الرياضيات.
‫م ، لكنها لا تحدد في الواقع ما تفعله.
‫لذلك يتم الانتهاء من ذلك في الرياضيات.
‫CP ويمكنك أن ترى أنه تطبيق بسيط للغاية بالفعل.
‫الآن ماذا يحدث في خطوة المعالج المسبق؟
‫حسنًا ، كما قلت ، إنه يتعامل مع أي توجيهات للمعالج المسبق ، وهي الأشياء التي تبدأ بعلامة التجزئة.
‫لذا فإن الهاش يشمل الرياضيات ، والتي تعني في الأساس نسخ كل شيء في الرياضيات إلى هنا.
‫إذن ما يفعله هو أنه يأخذ هذين الملفين ويجمعهما معًا لإنشاء ملف إخراج
‫جديد يسمى Game I تتضمن الألعاب بشكل أساسي ويمكنك أن ترى أنه تم تضمينه في التعريف من Master
‫H واستبداله بتوجيه المعالج المسبق للتجزئة.
‫حتى الآن ، حصلت Game II على تعريف لعملية ADD ثم قمنا بتشغيل المعالج الأولي على الرياضيات DHCP.
‫ولكن نظرًا لعدم وجود أي توجيهات للمعالج المسبق ، لم يتم تغيير أي شيء بشكل أساسي هناك.
‫الخطوة التالية هي على الأرجح أن يكون التجميع هو الخطوة الأكثر
‫أهمية وتعقيدًا ، لأن ما يفعله هو أنه يأخذ C ++ في كل ملف فردي ويحوله إلى ثنائي ، لكنه ليس ثنائيًا كاملاً
‫لأنه على سبيل المثال ، لعبتي ليست في الواقع تعرف كيفية تنفيذ AD ، فهي تعرف فقط شكل وظيفة الإضافة
‫هذه.
‫لذلك يجب ملء ذلك لاحقًا ويتم ملؤه بواسطة الرابط.
‫لذلك سيأخذ الرابط الثنائي الذي تم إنشاؤه لملف كائن اللعبة والثنائي الذي تم إنشاؤه
‫للملف الرئيسي ويجمعهما معًا لإنشاء لعبة.
‫XY الذي يجمع بين الثنائي وأخيرًا هو ملف تنفيذي كامل يمكننا تشغيله بالفعل لأنه
‫يحتوي على تعريف لكل ما يحتاجه.
‫الآن ، لماذا لدينا مثل هذه العملية المعقدة؟
‫الفكرة هنا هي أنها تسرع وقت التجميع لأنني إذا قمت بإجراء تغيير فقط.
‫لعبة DHCP.
‫لا أحتاج في الواقع إلى تشغيل عملية التجميع بأكملها.
‫كل ما علي فعله هو تشغيل البتات التي تتضمن لعبة DHCP ، لذلك كنت أقوم بتشغيل المعالج الأولي على CP فقط
‫، ثم أقوم بتشغيل المحول البرمجي فقط على اللعبة إلى I ومن ثم يمكنني إعادة استخدام ملف obj للرياضيات من قبل.
‫لست بحاجة إلى إعادة تجميعها لأنه لم يتغير شيء في ذلك.
‫وبالمثل ، إذا قمت بتغيير math dot CP فقط ، فلن أضطر إلى إعادة تجميع ملف obj للعبة ، وهذا هو سبب كون
‫هذه العملية أكثر فاعلية ولماذا نقوم بها في المقام الأول.
‫لذا أود أن نجري تجربة صغيرة ونحاول معرفة سبب تضمين تحريك H إلى الداخل
‫ونقل ملف CP؟
‫ما هو سبب ذلك؟
‫لماذا لا يمكننا فقط تجميع ملف C ++ دون تضمين نقله؟
‫H لذا فإن التجربة التي سنقوم بها هي أننا سنقوم بالتعليق على سطر تضمين التجزئة.
‫لذا ، فإن استخدام الشرطة المائلة للأمام مزدوجة لإدخال تعليق أمام هذا السطر ، مما
‫سيجعله يتم تجريده من قبل المعالج بدلاً من المعالج المسبق الذي يستبدله بمحتويات
‫الملف.
‫سنقوم بعد ذلك بإعادة التحويل البرمجي وأود منك إلقاء نظرة على رسائل الخطأ التي تظهر
‫ومعرفة ما تقوله لمعرفة ما إذا كان بإمكانك محاولة وفهم سبب تضمين هذه الخطوة.
‫أوقف الفيديو واذهب.
‫تمام.
‫مرحبًا بعودتك.
‫لذلك دعونا نضع شرطة مائلة مزدوجة في بداية هذا السطر ، مما يجعلها في الأساس لاغية
‫وباطلة.
‫ثم سنقوم بعمل بديل تحكم f 11 وسنلقي نظرة على ناتج البرمجة الحية.
‫انظروا ، لقد حصلنا على بعض الأخطاء على الفور ، في وقت مبكر جدًا.
‫وما يقوله هو أنك لا تحرك فئة أو مجال أسماء وهناك بعض الأشياء الأخرى هنا.
‫إنه يقول أن المكون التكنولوجي الأساسي لم يتم الإعلان عنه أن super ليس فئة أو أن
‫مالك مساحة الاسم هو معرف غير معروف.
‫وبشكل أساسي ما يقوله هذا هو أنك تحدثت عنك هنا ، لكنك لم تحدده في أي مكان ،
‫ولم تعلن عنه في أي مكان.
‫لذا لا أعلم.
‫مترجم C ++ يقول ، لا أعرف ما هذا.
‫هذا هو سبب وجود التجزئة ، بما في ذلك المحرك H لأن المحرك H يعلن الفئة.
‫تقول أن محرك U عبارة عن فئة وهي مشتقة من قيامك بتشغيل مكون ولديه هذه الأساليب ، وما إلى ذلك.
‫إنه يعلن ما يعنيه أن تكون تلك الطبقة.
‫لذلك بدون هذا الإعلان ، لا يمكن لمترجم C ++ المتابعة.
‫ولهذا السبب نحتاج إلى تضمين ملف الرأس هذا.
‫أشياء عظيمة.
‫لذلك نأمل أن تفهم الآن بشكل أفضل قليلاً العملية التي ينطوي عليها تجميع C ++
‫وخاصة تجميع C ++ في Unreal.
‫سأراك في المحاضرة القادمة.