top of page
التفاف العدو عند مواجهة الحائط
دعونا الآن نضع البرمجيات الازمة لنجعل العدو يدور بالإتجاه المعاكس في حال مواجهة الحائط
1- سنقوم أولاً بإضافة النقطة line trace for object: تقوم بتحديد خط من بداية حركة الشخصية إلى نهايتها, وسيبدأ مباشرةً بعد حركة العدو ما يعني أننا سنربطها مباشرةً مع حدث handlingmovemnt .

2- سنقوم بإضافة نقطة get actor location ونشبكها مع start
3- سنقوم بإضافة نقطة get actor forward vector ونشبكها مع end
4- إضافة النقطة multiply التي سنستعملها لنقوم بضرب القيمة التي نريد للخط أن ينتهي عندها ونقوم بشبكها مع get actor forward vector: يقوم بأخذ قيمة حركة العدو من الأمام وقيمتها الإفتراضية هي(1) نقوم بضرب قيمة get actor forward vector بالعدد الذي نريد للخط أن ينتهي عنده مثال (50)
نحن لا نريد سوى أن نجعل الشخصية تتحرك يميناً أو يساراً أي يعني في محور X فقط
5- لذلك فعلينا أن نضغط بالفارة اليسار على المحاور ثم نضغط split struct pin لكي نستطيع تقسيم حركة الشخصية على جميع المحاور
6- نقوم بإضافة النقطة add التي بها سنقوم بجمع القيمة الأمامية الحركية للعدو get actor forward vector مع قيمة تواجد العدو get actor location.


object types: ما هي نوع الأشياء التي تريد للخط أن يتعقبه
actors to ignore: ما هي نوع الأشياء التي تريد للخط أن يتجاهلها
ما علينا فعله الآن هو أن نحدد تلك الأشياء, ولفعل ذلك دعونا نستخرج نقطتين منهم تقومان بتحديد الأشياء.
7- نقوم بإستخراج نقطتين make array: التي تقوم ببناء صفوف نستطيع من خلالها وضع جميع الأشياء التي نريد للخط أن يتجاهلها أو يتعقبها.

يمكننا أن نظهر الخط من العدو عن طريق تغيير draw debug type إلى for duration

8- نقوم بتحديد نوع الأشياء التي سيتعقبها الخط وفي النهاية سيلتف العدو وهي:
pawn: قمنا بوضع pawn حتى في قادم الدروس عند إضافتنا لأعداء جدد فسيقوم العدو الحالي بالإلتفاف عند مواجهتهم(معلومة: جميع الشخصيات في الأنريل لها خاصية تصادم (collision) تدعى pawn).
worldDynamics: هي الأشياء التي تتحرك بالعالم وقد تكون في الحائط أيضاً
worldcollision: حتى يقوم العدو بالإلتفاف في حال مواجهة الحائط

9-نقوم بوضع الأشياء التي سيتجاهلها وفي النهاية لن يلتف العدو عند مواجهتها وهو الشخصية التي سنلعب بها ويمكننا فعل ذلك عن طريق:
إضافة النقطة get player character وشبكها مع make array ليقوم العدو بتجاهل الشخصية التي سنلعبها.
الآن علينا بوضع البرمجيات التي ستقوم بعمل ما سيحدث بعد أن يلمس الخط الأشياء
10- ننشأ نقطة branch من line trace for object return value
branch هي من حالات الشرط أي أنها تعطي إما قيمة صحيحة أو خاطئة
وفي حالة لمس العدو لشئ( قم لمرة واحدة بالتوقف ثم الإلتفاف) ويمكننا فعل ذلك عن طريق:
11- قم بإنشاء نقطة do once: تقوم بفعل شئ لمرة واحدة فقط
12- قم بإستدعاء نقطة get character movement: لنحصل على بيانات حركة العدو
13- ننشأ النقطة set max walk speed من بيانات حركة العدو get character movement
set max walk speed: قمنا بإنشائها لنجعل العدو يتوقف عند مواجهة الحائط
(0=set max walk speed)
وقم بجعل العدو يتوقف لمدة معينة ثم اجعله يتحرك بسرعة الطبيعية ولفعل للك نقوم بالآتي:
14- نقوم بإنشاء النقطة delay: تقوم بعمل تأخير للشئ لمدة من الوقت بالثواني
نجعل مدة التأخير (2 من الثواني)

15- إنشاء نقطة set max walk speed مرة أخرى لنقوم بجعل العدو يتحرك بسرعته الطبيعية
(الأساسية)
ولكن السؤال هنا ما هي السرعة الأساسية للشخصية؟
يمكننا معرفتنها من خلال التوجه الى خيار character movement وفي قائمة التفاصيل نقوم بكتابة max walk speed.

16- سنقوم الآن بتحويل قيمة max walk speed الى متغير جديد
(promtes to variable) نستطيع تغيير قيمته في أي وقت ثم نضغط compile
دعونا نجعل قيمة السرعة (200)

المشكلة أنه عند الذهاب لتفاصيل سرعة الحركة max walk speed سنجد بأنها ما زالت 600 لذلك فعلينا جعل سرعة الحركة 200 حتى عند بداية اللعب ويمكننا فعل ذلك إما بتغيير السرعة في التفاصيل او يمكننا تغييرها في البلوبرنت عن طريق فعل الآتي:
17-عند بداية اللعب قم بتغيير سرعة العدو إلى 200

18- سنقوم الآن بتحويل قيمة duration في delay الى متغير جديد
(promtes to variable) نستطيع تغيير قيمته في أي وقت ثم نضغط compile
دعونا نجعل قيمة مدة التوقف (2)

بعد أن ترجع الشخصية لسرعتها الطبيعية سنقوم بجعلها تلتف بالإتجاه المعاكس ويمكننا فعل ذلك الآتي:
19- سنقوم بإستدعاء المتغير الذي أنشأناه سابقاً get movedirection الذي يحمل قيمة الإتجاه
(scale value) وقيمته الإفتراضية (1).

20- سنقوم بإنشاء نقطة multiply بضرب قيمة الإتجاه الإفتراضية ب( -1 ) حتى نعكس إتجاه العدو ونشبكها مع قيمة get movedirection
-1*1=1

21- سنقوم بإستدعاء set movedirection حتى تتغير قيمة الإلتفاف عند مواجهة الحائط ونشبكها بعد set max walk speed
22- حتى نجعل تلك العملية تتكرر أكثر من مرة علينا بشبكها مع reset في do once.

23- قبل أن نبدأ اللعب نقوم بتغيير الترتيب حيث نجعل
event tick handling rotation handlingmovement

2- التفاف العدو عند الإقتراب من الحافة
دعونا الآن نضع البرمجيات الازمة لنجعل العدو يدور بالإتجاه المعاكس في حال مواجهة الحافة لكي لا يسقط
اولا علينا أن أن نقوم بتعديل الخلفية (الحائط) وللتعديل عليه نقوم بالضغط على الحائط
ونقوم بالإنتقال الى المكان حفظنا فيه الملف (oakwoodsTilesmap)

نقوم بالضغط على اداة المحو ونقوم بمسح الجزء الأيمن من الحائط


نقوم بتحديد النقاط المتعلقة بالإلتفاف عند مواجهة الحائط ونقوم بوضع تعليق(comment)
بعد التحديد نقوم بالضغط على حرف C ونقوم بتسمية التعليق detectwallandpawn

1-نقوم بإنشاء نقطة sequence من النقطة add movement input
sequence: تقوم بتنفيذ النقاط البرمجية بالترتيب 0 ثم 1.

2- نقوم بنسخ النقاط البرمجية في التعليق(detectwallandpawn) الذي أنشأناه
ونقوم بشبكه مع sequence 1.

3- نقوم بإنشاء النقطة subtract ونجعل قيمة المحورZ (95) ونشبكها مع get actor location و add في end

4- نقوم بإنشاء نقطة branch وفي حالة false (لم يكن هناك شئ أسفل الشخصية فإنتقل الى do once ليقم العدو بالإلتفاف )

5- نقوم بإغلاق خط التتبع (none) في line trace المخصص للحائط, ونقوم بتفعيل خطط التتبع المخصص للحافة

نقوم بتحديد النقاط المتعلقة بالإلتفاف عند مواجهة الحافة ونقوم بوضع تعليق(comment)بعد التحديد نقوم بالضغط على حرف C ونقوم بتسمية التعليق detectedge
الشرح:
ما فعلناه هو أولاً قمنا بإنشاء sequence الذي يقوم بترتيب تنفيذ الأعمال البرمجية
ونحن نريد للعدو أن يلتف عند مواجهة الحافة بعد التأكد من عدم وجود حائط(sequence then (0
بعد التأكد من عدم وجود حائط سنقوم بالإنتقال الى (sequence then (1
سيبدأ الخط(line trace) من العدو وينتهي ب 95 وحدة من الأسفل((Z=95)subtract)
و50 من أمام العدو((X=50)get actor forward vector)
وفي حال كان هناك حافة فيعني ذلك أن على العدو أن يلتف ولهذا السبب قمنا بشبك(branch(false) مع do once (لا يوجد هناك أي شئ أسفل العدو بمسافة 95 وحدة من الأسفل و 50 من الأمام قم بالإلتفاف(do once))

bottom of page