Menu
CoddyTech

أعلى نتيجة

جزء من قسم إنشاء ألعاب حقيقية في رحلة Unity على Coddy. الدرس 24 من 60.

النتيجة العالية هي أفضل نتيجة في جميع الألعاب التي تم لعبها، لذا تُحفَظ في PlayerPrefs ولا تتغير إلا عندما تتجاوزها نتيجة لعبة. يتحقق جدول البينبول هذا عند خروج الكرة الأخيرة:

void GameOver()
{
    int best = PlayerPrefs.GetInt("PinballBest", 0);
    if (score > best)
    {
        PlayerPrefs.SetInt("PinballBest", score);
        PlayerPrefs.Save();
        Debug.Log("New high score: " + score);
    }
}

المقارنة هي ما يجعلها نتيجة عالية. من دونها، ستُحفَظ نتيجة 300 بعد أفضل نتيجة مقدارها 5000، وسيضيع الرقم القياسي. قارِن بالأفضل نتيجة محفوظة، لا بشيء يبدأ من 0 في كل لعبة: فالحقل الذي لم يُحمَّل أي شيء فيه تكون قيمته 0 بعد كل إعادة تشغيل، لذا تتجاوزه أي نتيجة. يحافظ score > best على الرقم القياسي القديم عند التعادل، بينما سيعتبر score >= best التعادل نتيجة عالية جديدة.

لعرض النتيجة العالية أثناء اللعب، حمّلها في حقل داخل Start() واعرض ذلك الحقل. عندما تتجاوزها نتيجة لعبة، حدّث الحقل وPlayerPrefs والنص معًا، حتى لا تختلف الشاشة أبدًا عن القيمة المحفوظة.

challenge icon

التحدي

متوسط

احتفظ بأعلى نتيجة تحت المفتاح BestPoints.

  1. في Start()، فوق ShowBest();، اكتب best = PlayerPrefs.GetInt("BestPoints", 0);.
  2. في EndRound()، داخل if (points > best): عيّن best = points;، واحفظها باستخدام PlayerPrefs.SetInt وPlayerPrefs.Save()، ثم استدعِ ShowBest(); وnewBestText.SetActive(true);.

اضغط «العب» وانفخ بالونًا (اضغط باستمرار على Space ثم أفلت)، ثم اضغط Stop و«العب»: ستبقى أفضل نتيجة. ثم اضغط «تحقق».

جرّب بنفسك

using UnityEngine;
using TMPro;

public class BalloonPump : MonoBehaviour
{
    public TMP_Text pointsText;
    public TMP_Text bestText;
    public GameObject newBestText;
    public float pumpRate = 20f;

    private float air;
    private int points;
    private int best;
    private bool roundOver;

    void Start()
    {
        ShowBest();
    }

    void Update()
    {
        if (roundOver) return;

        if (Input.GetKey(KeyCode.Space))
        {
            air += pumpRate * Time.deltaTime;
            transform.localScale = Vector3.one * (1f + air / 50f);
            pointsText.text = "Points: " + Mathf.FloorToInt(air);
            if (air > 100f)
            {
                points = 0;
                pointsText.text = "Pop! Points: 0";
                GetComponent<Renderer>().enabled = false;
                roundOver = true;
                EndRound();
            }
        }
        else if (Input.GetKeyUp(KeyCode.Space))
        {
            points = Mathf.FloorToInt(air);
            pointsText.text = "Points: " + points;
            roundOver = true;
            EndRound();
        }
    }

    void EndRound()
    {
        // احفظ أفضل نتيجة جديدة هنا
    }

    void ShowBest()
    {
        bestText.text = "Best: " + best;
    }
}

جميع دروس إنشاء ألعاب حقيقية

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