كيفية إنشاء لعبة إطلاق نار بسيطة في Unreal Engine 4

مطلق النار من منظور الشخص الأول (FPS) هو نوع يستخدم فيه اللاعب البنادق ويختبر اللعبة من خلال عيون الشخصية، وتحظى ألعاب (FPS) بشعبية كبيرة، كما يتضح من الامتيازات مثل (Call of Duty) و(Battlefield).

وتم تصميم (Unreal Engine) في الأصل لإنشاء ألعاب (FPS)، لذلك من المنطقي فقط إنشاء واحدة باستخدامها، وستتعلم في هذا البرنامج التعليمي كيفية:

  1. إنشاء بيدق من منظور الشخص الأول يمكنه التحرك والنظر حوله.
  2. صناعة مسدساً وإرفاقه ببيدق اللعب.
  3. إطلاق الرصاص باستخدام خط التتبع (المعروف أيضاً باسم الشعاع المصبوب).
  4. إلحاق الضرر

البداية

قم بتنزيل مشروع البداية وفك ضغطه، وانتقل إلى مجلد المشروع (project folder) وافتح (BlockBreaker.uproject)، وسترى المشهد التالي:

البداية

يتكون الجدار الأخضر من أهداف متعددة، وعندما يتعرضون للضرر، سوف يتحولون إلى اللون الأحمر، وبمجرد أن تصل صحتهم إلى الصفر، سوف يختفون، والزر الأحمر سيعيد ضبط جميع الأهداف.

أولاً، ستنشئ بيدق اللاعب.

إنشاء بيدق اللاعب (Creating the Player Pawn)

انتقل إلى مجلد (Blueprints) وأنشئ فئة مخطط (Blueprint) جديدة، وحدد (Character) باعتباره الفئة الأصلية وقم بتسميته (BP_Player).

إنشاء بيدق اللاعب

(Character) هو نوع من البيدق ولكن مع وظائف إضافية مثل مكون (CharacterMovement).

إنشاء بيدق اللاعب

يتعامل هذا المكون تلقائياً مع الحركة مثل المشي والقفز، ويمكنك ببساطة استدعاء التابع المناسب وستحرك البيدق، يمكنك أيضاً تعيين متغيرات مثل سرعة المشي وسرعة القفز داخل هذا المكون.

وقبل أن تتمكن من تحريك البيدق يجب أن يعرف متى يضغط اللاعب على مفتاح الحركة، وللقيام بذلك، ستقوم بتعيين الحركة على المفاتيح W و A و S و D.

ملاحظة: إذا لم تكن على دراية بالتعيينات، فيمكنك التعرف عليها في برنامج المخططات (Blueprints) التعليمي، وتعيين المفاتيح هو كيفية تحديد المفاتيح التي ستقوم بتنفيذ إجراء ما.

إنشاء مخططات الحركة (Creating Movement Mappings)

حدد تحرير\ إعدادات المشروع (Edit\Project Settings) وافتح إعدادات الإدخال (Input settings).

وقم بإنشاء اثنين من تعيينات المحاور تسمى (MoveForward) و(MoveRight)، وسوف يتعامل (MoveForward) مع التحرك للأمام وللخلف، وسيتعامل (MoveRight) مع تحريك اليسار واليمين.

إنشاء مخططات الحركة

بالنسبة لـ (MoveForward)، قم بتغيير المفتاح إلى (W)، وبعد ذلك، أنشئ مفتاحاً آخر واضبطه على (S)، وقم بتغيير مقياس (S) إلى (-1.0).

إنشاء مخططات الحركة

ملاحظة: إذا كنت ترغب في التعرف على حقل المقياس، فاقرأ برنامج (Blueprints) التعليمي، يصف قسم قيمة المحور ومقياس الإدخال ما هو عليه وكيفية استخدامه.

وفي وقت لاحق، سوف تضرب قيمة المقياس مع متجه الأمام للبيدق، وسيعطيك هذا متجهاً يشير إلى الأمام إذا كان المقياس موجباً، وإذا كان المقياس سالباً، يشير المتجه إلى الخلف، وباستخدام المتجه الناتج، يمكنك تحريك البيدق للأمام وللخلف.

إنشاء مخططات الحركة

بعد ذلك، عليك أن تفعل الشيء نفسه للتحرك يساراً ويميناً، غيّر مفتاح (MoveRight) إلى (D)، وبعد ذلك، أنشئ مفتاحاً جديداً واضبطه على (A)، وغيّر مقياس (A) إلى (-1.0).

إنشاء مخططات الحركة

والآن بعد أن تم إعداد التعيينات، تحتاج إلى استخدامها للتنقل.

تنفيذ الحركة (Implementing Movement)

افتح (BP_Player) وافتح مخطط الأحداث (Event Graph)، وأضف حدث (MoveForward) والذي تم إدراجه ضمن أحداث المحور، وسينفذ هذا الحدث كل إطار، حتى لو لم تضغط على أي شيء.

تنفيذ الحركة

سيخرج أيضاً قيمة المحور والتي ستكون قيم المقياس التي قمت بتعيينها مسبقاً، وسيخرج 1 إذا ضغطت W و -1 إذا ضغطت على S، وإذا لم تضغط على أي من المفتاحين، فسيخرج 0.

وبعد ذلك، عليك إخبار البيدق بالتحرك، أضف إدخال حركة (Add Movement Input) وقم بتوصيله كما يلي:

تنفيذ الحركة

ستأخذ إضافة إدخال الحركة (Add Movement Input) متجهاً وتضربه في قيمة المقياس، وسيؤدي هذا إلى تحويله إلى الاتجاه المناسب، ونظراً لأنك تستخدم (Character)، فإن مكون (CharacterMovement) سيحرك البيدق في هذا الاتجاه.

والآن، تحتاج إلى تحديد الاتجاه الذي تريد التحرك فيه، ونظراً لأنك تريد المضي قدماً، يمكنك استخدام (Get Actor Forward Vector)، وسيعيد هذا متجهاً يشير إلى الأمام، وقم بإنشاء واحد وقم بتوصيله على النحو التالي:

تنفيذ الحركة

ملخص:

  1. ستعمل (MoveForward) على تشغيل كل إطار وإخراج قيمة المحور، وستكون هذه القيمة 1 إذا ضغطت W و -1 إذا ضغطت على S، وإذا لم تضغط على أي من المفتاحين، فستكون 0.
  2. ستؤدي إضافة إدخال الحركة (Add Movement Input) إلى مضاعفة متجه البيدق الأمامي بقيمة المقياس، وسيؤدي ذلك إلى توجيه المتجه للأمام أو للخلف اعتماداً على المفتاح الذي تضغط عليه، وإذا لم تضغط على أي مفتاح، فلن يكون للمتجه اتجاه، مما يعني أن البيدق لن يتحرك.
  3. سيحصل مكون (CharacterMovement) على النتيجة من إضافة إدخال الحركة (Add Movement Input)، ثم ستحرك البيدق في هذا الاتجاه.

كرر العملية لـ (MoveRight) ولكن استبدل (Get Actor Forward Vector) بـ (Get Actor Right Vector).

تنفيذ الحركة

قبل أن تتمكن من اختبار الحركة، تحتاج إلى تعيين البيدق الافتراضي في وضع اللعبة.

ضبط البيدق الافتراضي (Setting the Default Pawn)

انقر فوق (Compile) ثم ارجع إلى المحرر الرئيسي (main editor)، افتح لوحة الإعدادات العالمية (World Settings panel) وحدد موقع قسم وضع اللعبة (Game Mode)، وعدّل فئة البيدق الافتراضية إلى (BP_Player).

ضبط البيدق الافتراضي

ملاحظة: إذا لم يكن لديك لوحة إعدادات العالم (World Settings panel)، فانتقل إلى شريط الأدوات (Toolbar) وحدد الإعدادات\ إعدادات العالم (Settings\World Settings).

والآن ستستخدم (BP_Player) تلقائياً عند بدء اللعبة، اضغط على تشغيل (Play) واستخدم مفاتيح W و A و S و D للتنقل.

ضبط البيدق الافتراضي

بعد ذلك، ستقوم بإنشاء تعيينات للنظر حولك.

إنشاء مخططات النظر حول البيدق (Creating Look Mappings)

افتح إعدادات المشروع (Project Settings)، وقم بإنشاء اثنين آخرين من تعيينات المحور يسمى (LookHorizontal) و(LookVertical).

إنشاء مخططات النظر حول البيدق

قم بضبط مفتاح (LookHorizontal) على (Mouse X).

إنشاء مخططات النظر حول البيدق

سينتج عن هذا التعيين قيمة موجبة عند تحريك الماوس لليمين والعكس صحيح.

بعد ذلك، قم بضبط مفتاح (LookVertical) على (Mouse Y).

إنشاء مخططات النظر حول البيدق

سينتج عن هذا التعيين قيمة موجبة عند تحريك الماوس لأعلى والعكس صحيح.

الآن، تحتاج إلى إنشاء منطق للنظر حولك.

تنفيذ المظهر (Implementing Looking)

إذا لم يكن لدى البيدق مكون كاميرا، فسيقوم (Unreal) تلقائياً بإنشاء كاميرا لك، وبشكل افتراضي، ستستخدم هذه الكاميرا دوران وحدة التحكم.

ملاحظة: إذا كنت ترغب في معرفة المزيد عن وحدات التحكم، فقم بإلقاء نظرة على برنامج (Getting Started with AI) التعليمي.

وعلى الرغم من أن أجهزة التحكم ليست فيزيائية، إلا أنها لا تزال تتمتع بالدوران الخاص بها، وهذا يعني أنه يمكنك جعل البيدق والكاميرا في اتجاهين مختلفين، وعلى سبيل المثال، في لعبة الشخص الثالث، لا تواجه الشخصية والكاميرا دائماً نفس الاتجاه.

تنفيذ المظهر

ولتدوير الكاميرا في لعبة من منظور الشخص الأول، كل ما عليك فعله هو تغيير دوران وحدة التحكم.

افتح (BP_Player) ثم قم بإنشاء حدث (LookHorizontal).

تنفيذ المظهر

لجعل الكاميرا تدور يساراً أو يميناً، تحتاج إلى ضبط انعراج وحدة التحكم، قم بإنشاء إدخال (Add Controller Yaw Input) وقم بتوصيله على النحو التالي:

تنفيذ المظهر

الآن، عندما تقوم بتحريك الماوس أفقياً، فإن وحدة التحكم سوف تنحرف إلى اليسار أو اليمين، ونظراً لأن الكاميرا تستخدم دوران وحدة التحكم، فسوف تنحرف أيضاً.

كرر العملية لـ (LookVertical) ولكن استبدل (Add Controller Yaw Input) مع (Add Controller Pitch Input).

تنفيذ المظهر

إذا كنت تستخدم اختبار اللعبة الآن، فستلاحظ أن المظهر الرأسي معكوس، وهذا يعني أنه عند تحريك الماوس لأعلى، ستنظر الكاميرا إلى أسفل.

إذا كنت تفضل عناصر التحكم غير المقلوبة، فاضرب قيمة المحور في -1، وسيؤدي هذا إلى عكس قيمة المحور التي ستعكس نصب وحدة التحكم.

انقر فوق Compile ثم اضغط على تشغيل (Play)، واستخدم الفأرة لبدء النظر حولك.

تنفيذ المظهر

الآن بعد أن تمت كل الحركة والبحث، حان الوقت لإنشاء البندقية!

صنع البندقية (Creating the Gun)

أنت تعرف كيف عند إنشاء فئة مخطط (Blueprint)، يمكنك تحديد فئة الأصل؟ حسناً، يمكنك أيضاً تحديد (Blueprints) الخاصة بك بصفتك الوالد أيضاً، ويكون هذا مفيداً عندما يكون لديك أنواع مختلفة من الكائنات تشترك في وظائف أو سمات مشتركة.

لنفترض أنك تريد امتلاك أنواع متعددة من السيارات، ويمكنك إنشاء فئة أساسية للسيارة تحتوي على متغيرات مثل السرعة واللون، ويمكنك بعد ذلك إنشاء فئات (الأطفال) التي تستخدم فئة السيارة الأساسية كالوالد، وسيحتوي كل طفل أيضاً على نفس المتغيرات، الآن لديك طريقة سهلة لإنشاء سيارات ذات قيم مختلفة للسرعة والألوان.

صنع البندقية

يمكنك استخدام نفس الطريقة لصنع البنادق، وللقيام بذلك، تحتاج إلى إنشاء فئة أساسية أولاً.

إنشاء فئة البندقية الأساسية (Creating the Base Gun Class)

ارجع إلى المحرر الرئيسي وأنشئ (Blueprint Class) من النوع (Actor)، وقم بتسميته (BP_BaseGun) ثم افتحه.

بعد ذلك، ستقوم بإنشاء بعض المتغيرات التي ستحدد بعض خصائص البندقية، قم بإنشاء المتغيرات العائمة التالية:

  1. المدى (MaxBulletDistance): إلى أي مدى يمكن أن تقطع كل رصاصة.
  2. الضرر (Damage): مقدار الضرر الذي يحدث عندما تصيب رصاصة أحد الممثلين.
  3. معدل إطلاق النار (FireRate): كم من الوقت (بالثواني) قبل أن تتمكن البندقية من إطلاق رصاصة أخرى.

إنشاء فئة البندقية الأساسية

ملاحظة: القيم الافتراضية لكل متغير هي صفر وهو أمر جيد في هذا البرنامج التعليمي، ومع ذلك، إذا كنت تريد أن يكون لفئات الأسلحة الجديدة قيمة افتراضية، فيمكنك تعيينها في (BP_BaseGun).

الآن، أنت بحاجة إلى تمثيل مادي للبندقية، أضف مكون (Static Mesh) وقم بتسميته (GunMesh).

إنشاء فئة البندقية الأساسية

لا تقلق بشأن اختيار شبكة ثابتة (Static Mesh) في الوقت الحالي، ستفعل ذلك في القسم التالي عند إنشاء فئة (الأطفال) للأسلحة النارية.

إنشاء فئة بندقية الأطفال (Creating a Child Gun Class)

انقر فوق (Compile) ثم ارجع إلى المحرر الرئيسي، ولإنشاء فئة تابعة، انقر بزر الماوس الأيمن على (BP_BaseGun) وحدد (Create Child Blueprint Class).

إنشاء فئة بندقية الأطفال

قم بتسميته (BP_Rifle) ثم افتحه، وافتح افتراضيات الفئة (Class Defaults) وقم بتعيين كل متغير على القيم التالية:

  • المسافة القصوى (MaxBulletDistance): 5000
  • الضرر (Damage): 2
  • معدل إطلاق النار (FireRate): 0.1

إنشاء فئة بندقية الأطفال

هذا يعني أن كل رصاصة يمكنها أن تقطع مسافة 5000 كحد أقصى، وإذا اصطدمت بممثل، فإنها ستسبب ضررين، وعند إطلاق طلقات متتالية، ستكون المدة بين كل طلقتين 0.1 ثانية على الأقل.

بعد ذلك، تحتاج إلى تحديد الشبكة التي يجب أن يستخدمها المسدس، حدد مكون (GunMesh) واضبط (Static Mesh) على (SM_Rifle).

إنشاء فئة بندقية الأطفال

البندقية كاملة الآن، انقر فوق (Compile) ثم أغلق (BP_Rifle).

بعد ذلك، ستقوم بإنشاء مكون الكاميرا الخاص بك، وسيعطيك هذا تحكماً أفضل في وضع الكاميرا، وسيسمح لك أيضاً بتوصيل المسدس بالكاميرا مما سيبقي المسدس أمام الكاميرا.

إنشاء الكاميرا (Creating the Camera)

افتح (BP_Player) ثم قم بإنشاء مكون الكاميرا (Camera component)، وسمها (FpsCamera).

إنشاء الكاميرا

الوضع الافتراضي منخفض جداً مما قد يجعل اللاعب يشعر بأنه صغير، اضبط موقع (FpsCamera) على (0 ، 0 ، 90).

إنشاء الكاميرا

بشكل افتراضي، لا تستخدم مكونات الكاميرا دوران وحدة التحكم، ولإصلاح ذلك، انتقل إلى لوحة التفاصيل (Details panel) وقم بتمكين إعدادات الكاميرا\ استخدام تدوير التحكم في البيدق (Camera Settings\Use Pawn Control Rotation).

إنشاء الكاميرا

بعد ذلك، تحتاج إلى تحديد مكان البندقية.

تحديد موقع البندقية (Defining the Gun Location)

لإنشاء موقع البندقية، يمكنك استخدام مكون المشهد (Scene component)، وهذه المكونات مثالية لتحديد المواقع لأنها تحتوي فقط على تحويل، وتأكد من تحديد (FpsCamera) ثم قم بإنشاء مكون (Scene)، وسيؤدي ذلك إلى إرفاقه بالكاميرا، وسمه (GunLocation).

تحديد موقع البندقية

ومن خلال إرفاق (GunLocation) بـ (FpsCamera)، ستحافظ البندقية على نفس الموضع بالنسبة للكاميرا، وهذه هي الطريقة التي تحتفظ بها دائماً بالمسدس أمام الكاميرا.

بعد ذلك، اضبط موقع (GunLocation) على (30 ، 14 ، -12)، وسيؤدي ذلك إلى وضعه في المقدمة وجانب الكاميرا.

تحديد موقع البندقية

بعد ذلك، اضبط الدوران على (0 ، 0 ، -95)، عند إرفاق المسدس، سيجعله هذا يبدو وكأنه يستهدف مركز الشاشة.

تحديد موقع البندقية

الآن، تحتاج إلى توليد البندقية وإرفاقها بـ (GunLocation).

توليد المسدس وربطه (Spawning and Attaching the Gun)

حدد موقع بدء تشغيل الحدث (Event BeginPlay) وأنشئ ممثل توليد من الفئة (Spawn Actor From Class)، واضبط الفئة على (BP_Rifle).

توليد المسدس وربطه

ونظراً لأنك ستحتاج إلى استخدام البندقية لاحقاً، فيجب عليك تخزينها في متغير، قم بإنشاء متغير من النوع (BP_BaseGun) وقم بتسميته (EquippedGun).

ملاحظة: من المهم ألا يكون المتغير من النوع (BP_Rifle)، هذا لأن اللاعب يمكنه استخدام أنواع مختلفة من الأسلحة، وليس فقط البندقية، وإذا أنتجت نوعاً مختلفاً من الأسلحة، فلن تتمكن من تخزينها في متغير من النوع (BP_Rifle) سيكون الأمر أشبه بمحاولة احتواء دائرة في ثقب مستطيل.

ومن خلال إنشاء متغير من النوع (BP_BaseGun)، فإنك تنشئ ثقباً كبيراً يمكنه قبول العديد من الأشكال.

بعد ذلك، قم بضبط (EquippedGun) على القيمة المرجعة لعامل النشر من الفئة (Return Value of Spawn Actor From Class).

توليد المسدس وربطه

ولإرفاق البندقية، يمكنك استخدام (AttachToComponent)، قم بإنشاء واحدة وقم بضبط قاعدة الموقع (Location Rule) وقاعدة الدوران (Rotation Rule) على الانجذاب إلى الهدف (Snap to Target)، سيؤدي هذا إلى جعل البندقية لها نفس الموقع والتناوب مثل الأصل.

توليد المسدس وربطه

بعد ذلك، قم بإنشاء مرجع إلى (GunLocation) وقم بتوصيل كل شيء على هذا النحو:

توليد المسدس وربطه

ملخص:

  1. عندما تولد (BP_Player)، فإنها ستولد نسخة من (BP_Rifle).
  2. ستحتفظ (EquippedGun) بمرجع إلى (BP_Rifle) المُنتَج لاستخدامه لاحقاً.
  3. سوف (AttachToComponent) إرفاق المسدس إلى (GunLocation).

انقر فوق (Compile) ثم اضغط على تشغيل (Play)، الآن سيكون لديك بندقية عندما تولد، وعندما تنظر حولك، سيكون البندقية دائماً أمام الكاميرا.

توليد المسدس وربطه

والآن يأتي الجزء الممتع، إطلاق الرصاص، وللتحقق مما إذا كانت الرصاصة تصطدم بشيء ما، يمكنك استخدام تتبع الخط (line trace).

إطلاق الرصاص (Shooting Bullets)

تتبع الخط هو تابع يأخذ نقطة البداية والنهاية (التي تشكل خطاً)، وسيتحقق بعد ذلك من كل نقطة على طول الخط (من البداية إلى النهاية) حتى تصل إلى شيء ما، وفي الألعاب، هذه هي الطريقة الأكثر شيوعاً للتحقق مما إذا كانت الرصاصة تصطدم بشيء ما.

ونظراً لأن إطلاق النار هي وظيفة البنادق، فيجب أن يكون في فئة الأسلحة بدلاً من اللاعب، افتح (BP_BaseGun) وأنشئ تابع يسمى (Shoot).

بعد ذلك، قم بإنشاء مدخلين في (Vector) وقم بتسمية كل منهما (StartLocation) و(EndLocation)، وستكون هذه نقطتي البداية والنهاية لتتبع الخط (الذي ستمرره من BP_Player).

إطلاق الرصاص

ويمكنك إجراء تتبع خط باستخدام (LineTraceByChannel)، وستتحقق هذه العقدة من النتائج باستخدام قناة الرؤية (Visibility) أو تصادم الكاميرا (Camera collision)، قم بإنشاء واحد وقم بتوصيله على النحو التالي:

إطلاق الرصاص

بعد ذلك، تحتاج إلى التحقق مما إذا كان تتبع الخط قد وصل إلى أي شيء، قم بإنشاء فرع (Branch) وقم بتوصيله على هذا النحو:

إطلاق الرصاص

سيتم إخراج قيمة الإرجاع بشكل صحيح إذا كانت هناك نتيجة والعكس صحيح.

ولإعطاء اللاعب بعض الملاحظات المرئية حول مكان إصابة الرصاصة، يمكنك استخدام تأثير الجسيمات (particle effect).

توليد جزيئات تأثير الرصاص (Spawning Bullet Impact Particles)

أولاً، تحتاج إلى الحصول على موقع إصابة التتبع، اسحب وانقر فوق (Out Hit) وحرر النقر بزر الماوس الأيسر في الرسم البياني (graph)، ومن القائمة، حدد (Break Hit Result).

توليد جزيئات تأثير الرصاص

سيعطيك هذا عقدة ذات دبابيس مختلفة تتعلق بنتيجة تتبع الخط.

قم بإنشاء باعث توليد (Spawn Emitter) في الموقع واضبط قالب الباعث (Emitter Template) على (PS_BulletImpact)، بعد ذلك، قم بتوصيل موقعه (Location) بموقع نتيجة ضرب الكسر (Location of Break Hit Result).

توليد جزيئات تأثير الرصاص

ها هو التابع حتى الآن:

توليد جزيئات تأثير الرصاص

ملخص:

  1. عند تنفيذ (Shoot)، سيتم تنفيذ تتبع خط باستخدام نقطتي البداية والنهاية المتوفرة.
  2. إذا كانت هناك إصابة، فسيقوم (Spawn Emitter at Location) بإنشاء (PS_BulletImpact) في موقع الإصابة.

الآن بعد أن اكتمل منطق الإطلاق، تحتاج إلى استخدامه.

استدعاء تابع الإطلاق (Calling the Shoot Function)

أولاً، تحتاج إلى إنشاء تعيين مفتاح للإطلاق، انقر فوق (Compile) ثم افتح إعدادات المشروع (Project Settings)، وقم بإنشاء مخطط محور (Axis Mapping) جديد يسمى (Shoot)، واضبط مفتاحه على زر الماوس الأيسر ثم أغلق إعدادات المشروع (Project Settings).

استدعاء تابع الإطلاق

بعد ذلك، افتح (BP_Player) وقم بإنشاء حدث (Shoot).

استدعاء تابع الإطلاق

وللتحقق مما إذا كان اللاعب يضغط على مفتاح (Shoot)، تحتاج فقط إلى التحقق مما إذا كانت قيمة المحور تساوي 1، أنشئ العقد المميزة (highlighted):

استدعاء تابع الإطلاق

بعد ذلك، قم بإنشاء مرجع إلى (EquippedGun) ثم قم باستدعاء تابع (Shoot) الخاصة به.

استدعاء تابع الإطلاق

أنت الآن بحاجة إلى حساب نقطتي البداية والنهاية لتتبع الخط.

حساب مواقع تتبع الخط (Calculating the Line Trace Locations)

في العديد من ألعاب (FPS)، تبدأ الرصاصة من الكاميرا بدلاً من البندقية، وهذا بسبب محاذاة الكاميرا تماماً بالفعل مع الخطوط المتصالبة، ولذلك إذا قمت بالتصوير من الكاميرا، فإن الرصاصة مضمونة للذهاب إلى حيث توجد علامة التصويب.

ملاحظة: بعض الألعاب تطلق من البندقية، ومع ذلك، فإنه يتطلب حسابات إضافية للإطلاق باتجاه التقاطع.

قم بإنشاء مرجع إلى (FpsCamera) ثم قم بتوصيله بـ (GetWorldLocation).

حساب مواقع تتبع الخط

الآن أنت بحاجة إلى موقع النهاية، تذكر أن البنادق لها متغير (MaxBulletDistance)، وهذا يعني أن الموقع النهائي يجب أن يكون (MaxBulletDistance) كمية الوحدات أمام الكاميرا، وللقيام بذلك، قم بإنشاء العقد المميزة (highlighted):

حساب مواقع تتبع الخط

بعد ذلك، قم بتوصيل كل شيء كما يلي:

حساب مواقع تتبع الخط

ملخص:

  1. عندما يقوم اللاعب بالضغط أو الضغط على الزر الأيسر، فإن البندقية ستطلق رصاصة من الكاميرا.
  2. ستنتقل الرصاصة إلى الأمام بالمسافة المحددة بواسطة (MaxBulletDistance).

انقر فوق (Compile) ثم اضغط على تشغيل (Play)، واضغط بالزر الأيسر لبدء التصوير.

حساب مواقع تتبع الخط

حالياً، البندقية تطلق كل إطار، وهذا سريع جداً، لذا فإن الخطوة التالية هي تقليل معدل إطلاق البندقية.

خفض معدل إطلاق النار (Decreasing the Fire Rate)

أولاً، أنت بحاجة إلى متغير لتقرر ما إذا كان بإمكان اللاعب إطلاق النار، افتح (BP_Player) وأنشئ متغيراً منطقياً باسم (CanShoot)، واضبط قيمته الافتراضية على صحيح، وإذا كان (CanShoot) يساوي (true)، فيمكن للاعب أن يطلق النار والعكس صحيح.

قم بتغيير قسم الفرع (Branch) إلى ما يلي:

خفض معدل إطلاق النار

الآن، يمكن للاعب الإطلاق فقط إذا تم الضغط على مفتاح (Shoot) وكان (CanShoot) يساوي (true).

بعد ذلك، أضف العقد المميزة (highlighted):

خفض معدل إطلاق النار

التغييرات:

  1. يمكن للاعب أن يطلق النار فقط إذا كان الضغط على الزر الأيسر مع الاستمرار في إطلاق النار وكان (CanShoot) يساوي (true).
  2. بمجرد أن يطلق اللاعب رصاصة، سيتم تعيين (CanShoot) على (false)، وسيمنع هذا اللاعب من إطلاق النار مرة أخرى.
  3. سيتم إعادة (CanShoot) إلى (true) بعد المدة التي قدمها (FireRate).

انقر فوق (Compile) ثم أغلق (BP_Player)، واضغط على تشغيل (Play) واختبر معدل إطلاق النار الجديد.

خفض معدل إطلاق النار

بعد ذلك، ستجعل الأهداف والزر يستجيبان للرصاص، ويمكنك القيام بذلك عن طريق إلحاق الضرر بهم.

تطبيق الضرر (Applying Damage)

في (Unreal)، كل ممثل لديه القدرة على تلقي الضرر، ومع ذلك، فإن الأمر متروك لك لتحديد كيفية استجابة الممثل لها.

على سبيل المثال، عند تلقي الضرر، تفقد شخصية لعبة القتال صحتها، ومع ذلك، فإن شيئاً مثل البالون لن يكون له صحة، وبدلاً من ذلك، يمكنك برمجة البالون ليفرقع عندما يتلقى ضرراً.

وقبل أن تتعامل مع كيفية تلقي الممثل للضرر، عليك أولاً تطبيق الضرر، افتح (BP_BaseGun) وأضف تطبيق الضرر (Apply Damage) في نهاية تابع الإطلاق.

تطبيق الضرر

بعد ذلك، تحتاج إلى تحديد الممثل الذي تريد إلحاق الضرر به، وفي هذه الحالة، هو الممثل الذي تم ضربه من خلال تتبع الخط، وربط الممثل التالف (Damaged Actor) لضرب الممثل (Hit Actor) من نتيجة ضربة كسر (Break Hit Result).

تطبيق الضرر

أخيراً، تحتاج إلى تحديد مقدار الضرر الذي يجب تطبيقه، احصل على مرجع للضرر (Damage) وقم بتوصيله بالضرر الأساسي (Base Damage).

تطبيق الضرر

الآن، عندما تقوم باستدعاء (Shoot)، فإنه سيتلف أي ممثلين يصطدمون بتتبع الخط، انقر فوق (Compile) ثم أغلق (BP_BaseGun).

أنت الآن بحاجة إلى التعامل مع كيفية تلقي كل ممثل للضرر.

معالجة الضرر (Handling Damage)

أولاً، سوف تتعامل مع كيفية تعرض الأهداف للضرر، افتح (BP_Target) ثم قم بإنشاء حدث (AnyDamage)، سيتم تنفيذ هذا الحدث عندما يتلقى الممثل ضرراً ليس صفراً.

معالجة الضرر

بعد ذلك، اتصل بتابع (TakeDamage) وقم بتوصيل دبابيس الضرر، وسيؤدي هذا إلى طرح الصحة من متغير صحة الهدف وتحديث لون الهدف.

معالجة الضرر

الآن، عندما يتعرض الهدف للضرر، سيفقد صحته، انقر فوق (Compile) ثم أغلق (BP_Target).

بعد ذلك، تحتاج إلى التعامل مع كيفية تلف الزر، افتح زر (BP Reset) وأنشئ حدث أي ضرر (AnyDamage)، وبعد ذلك، اتصل بتابع (ResetTargets).

معالجة الضرر

سيؤدي هذا إلى إعادة تعيين جميع الأهداف عندما يتلقى الزر ضرراً، انقر فوق (Compile) ثم أغلق (BP_ResetButton).

اضغط على تشغيل (Play) وابدأ في إطلاق النار على الأهداف، وإذا كنت ترغب في إعادة تعيين الأهداف، أطلق النار على الزر.

معالجة الضرر

المصدر
هنا

مقالات ذات صلة

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني.