Menu
CoddyTech

مضرب عريض

الدرس 16 من 19 في دورة لعبة Unity: كاسر الطوب على Coddy.

التأثير المؤقت هو روتين مشترك: غيّر، وانتظر، ثم أعد القيمة. إذا حدث التقاط ثانٍ أثناء استمرار الأول، فيجب أن يبدأ الوقت من جديد، لذا احتفظ بـCoroutine الذي تُعيده StartCoroutine وأوقفه قبل بدء روتين جديد. وإلا سينتهي الأول مبكرًا ويلغي تأثير الثاني. تعزيز السرعة:

if (boost != null) StopCoroutine(boost);
boost = StartCoroutine(BoostFor(3f));

IEnumerator BoostFor(float seconds)
{
    speed = normalSpeed * 2f;
    yield return new WaitForSeconds(seconds);
    speed = normalSpeed;
    boost = null;
}

يضبط السرعة انطلاقًا من normalSpeed، المحفوظة مرة واحدة، بدلًا من مضاعفة السرعة الحالية: تعزيزان متتاليان سيجعلانها أسرع بأربعة أضعاف. تقرأ آلية تقييد حركة المضرب عرضه في كل خطوة، لذا يتوقف المضرب العريض عند الجدران أيضًا.

challenge icon

التحدي

صعب

يجعل تعزيز Wide المضرب أعرض لمدة 8 ثوانٍ.

  1. في Paddle، أضف public float wideFactor = 1.6f; وpublic float wideSeconds = 8f;، واحتفظ بمقياس x الطبيعي في Awake.
  2. توقف Widen() الروتين المشترك الجاري، إن وُجد، وتبدأ روتينًا مشتركًا: مقياس x يساوي wideFactor مضروبًا في المقياس الطبيعي، ثم انتظر wideSeconds، ثم أعده إلى الطبيعي.
  3. يحتاج الروتين المشترك إلى using System.Collections;.

اضغط «العب» والتقط واحدة خضراء: يكبر المضرب، ثم يعود إلى حجمه السابق. ثم اضغط «تحقق».

جرّب بنفسك

using UnityEngine;
using UnityEngine.InputSystem;

public class Paddle : MonoBehaviour
{
    public float speed = 14f;
    public float wallX = 8f;   // الأوجه الداخلية للجدارين الجانبيين تقع عند -wallX وwallX

    Rigidbody rb;

    void Awake()
    {
        rb = GetComponent<Rigidbody>();
    }

    void FixedUpdate()
    {
        float input = 0f;
        if (Keyboard.current.leftArrowKey.isPressed || Keyboard.current.aKey.isPressed) input -= 1f;
        if (Keyboard.current.rightArrowKey.isPressed || Keyboard.current.dKey.isPressed) input += 1f;

        Vector3 target = rb.position + Vector3.right * input * speed * Time.fixedDeltaTime;
        float halfWidth = transform.localScale.x / 2f;
        target.x = Mathf.Clamp(target.x, -wallX + halfWidth, wallX - halfWidth);
        rb.MovePosition(target);
    }

    public void Widen()
    {
        Debug.Log("Wide paddle");
    }
}

جميع دروس لعبة Unity: كاسر الطوب

تدرّب بنفسك: Playground لـ Unity