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

النجاة وتحقيق النقاط

جزء من قسم أساسيات البرمجة النصية في Unity في رحلة Unity على Coddy. الدرس 64 من 67.

challenge icon

التحدي

متوسط

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

  • متغيرًا من النوع float باسم score يحسب الثواني التي نجوت فيها: أضف وقت الإطار إلى قيمته في كل إطار أثناء تشغيل اللعبة.
  • حقلًا باسم speedUp يضبطه Inspector (0.2). تزداد قيمة fallSpeed بمقدار speedUp كل ثانية، قليلًا في كل إطار، حتى تسقط الكتل بسرعة متزايدة.
  • عند الاصطدام، سجّل Game over! Score: 12 بدلًا من Game over، مع عدد الثواني الكاملة في score (حوّله إلى int).

اضغط Play وتجاوز نتيجتك، ثم اضغط Check.

جرّب بنفسك

using System.Collections.Generic;
using UnityEngine;

public class Runner : MonoBehaviour
{
    [SerializeField] private float speed = 6f;
    [SerializeField] private float laneEdge = 4f;
    [SerializeField] private GameObject blockPrefab;
    [SerializeField] private float spawnEvery = 1f;
    [SerializeField] private float fallSpeed = 5f;

    private List<GameObject> blocks = new List<GameObject>();
    private float timer;

    void Update()
    {
        Vector3 p = transform.position;
        p.x += Input.GetAxisRaw("Horizontal") * speed * Time.deltaTime;
        p.x = Mathf.Clamp(p.x, -laneEdge, laneEdge);
        transform.position = p;

        timer += Time.deltaTime;
        if (timer >= spawnEvery)
        {
            timer = 0f;
            Vector3 spot = new Vector3(Random.Range(-laneEdge, laneEdge), 10f, 0f);
            blocks.Add(Instantiate(blockPrefab, spot, Quaternion.identity));
        }

        for (int i = blocks.Count - 1; i >= 0; i--)
        {
            blocks[i].transform.position += Vector3.down * fallSpeed * Time.deltaTime;
            Vector3 b = blocks[i].transform.position;
            if (Mathf.Abs(b.x - transform.position.x) < 1f && Mathf.Abs(b.y - transform.position.y) < 1f)
            {
                Debug.Log("Game over");
                enabled = false;
                return;
            }
            if (b.y < -1f)
            {
                Destroy(blocks[i]);
                blocks.RemoveAt(i);
            }
        }
    }
}

جميع دروس أساسيات البرمجة النصية في Unity