المطاردة ضمن النطاق
جزء من قسم الفيزياء وأسلوب اللعب في رحلة Unity على Coddy. الدرس 53 من 71.
تتركك معظم الأعداء وشأنك حتى تقترب منهم. قِس المسافة إلى اللاعب في كل خطوة فيزيائية، ولا تطارده إلا ضمن نطاق محدد. يطارد هذا الوحل اللاعب ضمن sightRange ويظل ساكنًا خارجه:
void FixedUpdate()
{
Vector3 toPlayer = player.position - rb.position;
toPlayer.y = 0f;
if (toPlayer.magnitude < sightRange)
{
Vector3 dir = toPlayer.normalized;
rb.linearVelocity = new Vector3(dir.x * speed, rb.linearVelocity.y, dir.z * speed);
}
else
{
rb.linearVelocity = new Vector3(0f, rb.linearVelocity.y, 0f);
}
}إن else مهمة: يحتفظ الجسم الصلب بسرعته حتى يغيّرها شيء ما. من دونها، يواصل الوحل الذي يفقدك الانزلاق حتى يوقفه الاحتكاك، أما على الجليد فلا يتوقف أبدًا. وبما أن قيمة y ضُبطت على 0 أولًا، فإن toPlayer.magnitude تمثل المسافة على الأرض، لذا يُعدّ اللاعب الواقف على صندوق بجوار الوحل واقفًا بجواره أيضًا.
للنطاق الواحد نقطة ضعف. فاللاعب الواقف عند حدوده يتحرك إلى داخله وخارجه، ويبدأ الوحل ويتوقف مرارًا. تتجنب الأعداء ذلك باستخدام نطاقين: تلاحظ اللاعب ضمن نطاق قصير، ولا تستسلم إلا عندما يتجاوز نطاقًا أطول. وتتذكر bool ما إذا كان العدو يطارد اللاعب، وبين النطاقين لا يتغير شيء فيها، لذا يواصل العدو ما كان يفعله.
التحدي
متوسطاجعل الذئب ينتبه إلى اللاعب عندما يكون قريبًا، ويتخلى عن مطاردته عندما يكون بعيدًا.
- في
FixedUpdate()، احسب المسافة الأفقية إلى اللاعب: إذا كانت أقل منnoticeRange، فعيّن الحقلbool chasingإلىtrue؛ وإذا كانت أكبر منgiveUpRange، فعيّنه إلىfalse. - أثناء
chasing، عيّنrb.linearVelocityليتجه نحو اللاعب بسرعةspeed، مع الحفاظ على قيمة y. - وإلا، عيّن
rb.linearVelocity = new Vector3(0f, rb.linearVelocity.y, 0f);.
اضغط على «العب»، واقترب من الذئب ثم اركض. بعد ذلك اضغط على «تحقق».
جرّب بنفسك
using UnityEngine;
public class Wolf : MonoBehaviour
{
[SerializeField] private Transform player;
[SerializeField] private float speed = 3f;
[SerializeField] private float noticeRange = 4f;
[SerializeField] private float giveUpRange = 8f;
private Rigidbody rb;
void Start()
{
rb = GetComponent<Rigidbody>();
}
void FixedUpdate()
{
// لاحظ اللاعب، وتوقّف عن ملاحقته، ثم طارده أو ابقَ ساكنًا
}
}
جميع دروس الفيزياء وأسلوب اللعب
1الجسم الصلب (Rigidbody)
الجاذبية والكتلةالدفع باستخدام AddForceالقفز باستخدام دفعةFixedUpdate للفيزياءالسرعة المتجهةالأجسام الحركيةمراجعة: منصة الإطلاق4الكوروتينات
InvokeInvokeRepeating, CancelInvokeأول Coroutine لكالحلقات داخل الكوروتيناتإيقاف الكوروتيناتمراجعة: العد التنازلي10المشروع: الهروب من الحلبة
الحلبةالصيادون3المحفزات
مصادمات المحفزاتOnTriggerEnterالعناصر القابلة للجمعالصناديق تحتفظ بالباقيمناطق القتلالدخول والخروجمراجعة: المفتاح والباب6اختبارات الأشعة
Physics.RaycastRaycastHitالتحقق من ملامسة الأرض باستخدام شعاعالطبقات وLayerMaskخط الرؤيةOverlapSphere وSphereCastمراجعة: حاجز ليزري9الأعداء
مطاردة اللاعبالمطاردة ضمن النطاقالدورية والمطاردةالصحة والضررالرصاصات التي تصيبالارتدادمراجعة: كلب الحراسةتدرّب بنفسك: Playground لـ Unity