الحلبة
جزء من قسم الفيزياء وأسلوب اللعب في رحلة Unity على Coddy. الدرس 59 من 71.
يبني هذا الفصل لعبة «الهروب من الساحة». تتفادى الصيادين في ساحة محاطة بجدران بينما تتدفق موجات منهم إلى الداخل، وتنتهي الجولة بعد ثلاث إصابات، وعندما تنتهي الموجة الأخيرة يُفتح مخرج. تتكون اللعبة من خمسة سكريبتات موجودة في المشروع منذ البداية: Player وHunter وSpawner وHealth وExit. السكريبتات الأربعة الأخيرة فارغة الآن، ويملأ كل درس أحدها.
يتحرك اللاعب باستخدام القوى بدلًا من سرعة يضبطها بنفسه، لذا تضيف قوة دفع الصياد حركته إلى حركة اللاعب بدلًا من أن تُمحى. إن الدفع وحده سيزيد سرعته إلى الأبد، لذا يخفض linearDamping جزءًا من سرعته في كل خطوة: يستقر الدفع الثابت عند سرعة قصوى تساوي تقريبًا التسارع مقسومًا على التخميد. تدفع هذه المزلجة الهوائية إلى الأمام ما دامت مفتاح المسافة مضغوطًا:
[SerializeField] private float accel = 12f;
private Rigidbody rb;
void Start()
{
rb = GetComponent<Rigidbody>();
rb.linearDamping = 2f;
}
void FixedUpdate()
{
if (Input.GetKey(KeyCode.Space))
{
rb.AddForce(transform.forward * accel, ForceMode.Acceleration);
}
}عندما يكون التسارع 12 والتخميد 2، تبلغ المزلجة سرعتها القصوى عند نحو 6 وحدات في الثانية، وعند ترك مفتاح المسافة يوقفها التخميد بدلًا من أن يتركها تنزلق إلى الأبد. يتجاهل ForceMode.Acceleration الكتلة، لذا تتسارع المزلجة الثقيلة تمامًا مثل الخفيفة. يحتوي مصادم المزلجة على مادة فيزيائية بلا احتكاك: فلو أُضيف احتكاك الأرضية إلى التخميد، لكانت سرعتها القصوى أقل.
التحدي
متوسطابدأ Arena Escape: ينزلق اللاعب بفعل القوى.
- في
Start()، بعد سطرGetComponent، اضبطrb.linearDamping = accel / topSpeed;، لكي تتباطأ الحركة تدريجيًا بالقرب منtopSpeed. - في
FixedUpdate()، أنشئnew Vector3(Input.GetAxisRaw("Horizontal"), 0f, Input.GetAxisRaw("Vertical")). - مرّر حاصل ضرب
normalizedفيaccelإلىrb.AddForceباستخدامForceMode.Acceleration.
اضغط «العب» وانزلق في أنحاء الساحة. ثم اضغط «تحقق».
جرّب بنفسك
using UnityEngine;
public class Player : MonoBehaviour
{
[SerializeField] private float accel = 18f;
[SerializeField] private float topSpeed = 6f;
private Rigidbody rb;
void Start()
{
rb = GetComponent<Rigidbody>();
}
void FixedUpdate()
{
// اضبط التخميد، ثم حرّك اللاعب باستخدام مفاتيح الأسهم
}
}
جميع دروس الفيزياء وأسلوب اللعب
1الجسم الصلب (Rigidbody)
الجاذبية والكتلةالدفع باستخدام AddForceالقفز باستخدام دفعةFixedUpdate للفيزياءالسرعة المتجهةالأجسام الحركيةمراجعة: منصة الإطلاق4الكوروتينات
InvokeInvokeRepeating, CancelInvokeأول Coroutine لكالحلقات داخل الكوروتيناتإيقاف الكوروتيناتمراجعة: العد التنازلي10المشروع: الهروب من الحلبة
الحلبةالصيادونتدرّب بنفسك: Playground لـ Unity