Menu
CoddyTech
flag Ar iconالعربيةdown icon

غولف الكرات الزجاجية

جزء من قسم الفيزياء وأسلوب اللعب في رحلة Unity على Coddy. الدرس 62 من 63.

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

اكتب نصين برمجيين: Golf على البلية وHole على الحفرة.

challenge icon

التحدي

صعب

يمنح 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، وسدّد عند إفلاته، وتوقّف عندما تصبح السرعة منخفضة
}
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس الفيزياء وأسلوب اللعب