غولف الكرات الزجاجية
جزء من قسم الفيزياء وأسلوب اللعب في رحلة Unity على Coddy. الدرس 62 من 63.
العب الجولف ببلية على ملعب أخضر صغير. تبدأ البلية عند نقطة الانطلاق: وجّهها باستخدام الأسهم، واضغط باستمرار على Space لبناء القوة ثم اتركه لتسديدها. تتدحرج وترتد عن الحواجز والكتلة في المنتصف، ثم تتباطأ، وعندما تصبح بطيئة بما يكفي تتوقف تمامًا. عندها فقط يمكنك التسديد مرة أخرى. البلية التي تتدحرج إلى الحفرة ببطء تسقط فيها؛ أما التي تصل بسرعة كبيرة فتتجاوزها مباشرة. كلما قلّ عدد الضربات كان ذلك أفضل.
اكتب نصين برمجيين: Golf على البلية وHole على الحفرة.
التحدي
صعبيمنح Inspector الكائن Golf العنصر pointer (الكرة الصفراء الصغيرة)، وaimSpeed (90)، وchargeRate (4)، وmaxPower (6)، وstopSpeed (0.3). كتلة الكرة الزجاجية هي 0.5.
- التصويب عبارة عن زاوية حول المحور y، وتكون 0 عند البداية (مباشرةً إلى الأمام، +z). يوجه السهم الأيمن التصويب إلى اليمين، والسهم الأيسر إلى اليسار، بسرعة
aimSpeedدرجة في الثانية. في كل إطار، ضع المؤشر على بُعد وحدة واحدة من الكرة الزجاجية في اتجاه التصويب. - تكون الكرة الزجاجية في حالة سكون عندما تكون سرعتها أقل من
stopSpeed. في كل خطوة فيزيائية، أوقف الكرة الزجاجية الساكنة تمامًا: اجعل السرعة والسرعة الزاوية صفرًا. - فقط عندما تكون الكرة الزجاجية في حالة سكون: يؤدي الضغط باستمرار على Space إلى زيادة القوة بمعدل
chargeRateفي الثانية، دون أن تتجاوزmaxPower، ويؤدي ترك Space إلى دفع الكرة الزجاجية بقوة Impulse بهذه القوة في اتجاه التصويب. تعود القوة بعد ذلك إلى 0، وتزداد قيمةint strokesالعامة بمقدار 1، ويُسجَّل ذلك على النحو التالي:Stroke 1.
يمنح Inspector الكائن Hole القيمة sinkSpeed (3).
- عندما تدخل الكرة الزجاجية (الكائن الذي يحتوي على النص البرمجي
Golf) الحفرة بسرعة أقل منsinkSpeed، سجّل عدد ضرباتها على النحو التالي:In the cup in 2 strokes!، ثم عطّل الكرة الزجاجية. أما الكرة الزجاجية الأسرع فستتجاوز الحفرة.
اضغط على Play وأدخل الكرة الزجاجية في الحفرة بأقل عدد ممكن من الضربات، ثم اضغط على Check.
جرّب بنفسك
using UnityEngine;
public class Golf : MonoBehaviour
{
public int strokes = 0;
[SerializeField] private Transform pointer;
[SerializeField] private float aimSpeed = 90f;
[SerializeField] private float chargeRate = 4f;
[SerializeField] private float maxPower = 6f;
[SerializeField] private float stopSpeed = 0.3f;
private Rigidbody rb;
void Start()
{
rb = GetComponent<Rigidbody>();
}
// صوّب باستخدام الأسهم، واشحن باستخدام Space، وسدّد عند إفلاته، وتوقّف عندما تصبح السرعة منخفضة
}
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس الفيزياء وأسلوب اللعب
1الجسم الصلب (Rigidbody)
الجاذبية والكتلةالدفع باستخدام AddForceالقفز باستخدام دفعةFixedUpdate للفيزياءالسرعة المتجهةالأجسام الحركيةمراجعة: منصة الإطلاق