أعلى نتيجة
جزء من قسم إنشاء ألعاب حقيقية في رحلة 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 والنص معًا، حتى لا تختلف الشاشة أبدًا عن القيمة المحفوظة.
التحدي
متوسطاحتفظ بأعلى نتيجة تحت المفتاح BestPoints.
- في
Start()، فوقShowBest();، اكتبbest = PlayerPrefs.GetInt("BestPoints", 0);. - في
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;
}
}
جميع دروس إنشاء ألعاب حقيقية
4المشاهد والمستويات
تحميل مشهدإعادة تشغيل المستوىالمستوى التاليالاحتفاظ بالبيانات بين المشاهدمراجعة: اختيار المستوى10مشروع: لعبة منصات ثلاثية الأبعاد
المسارمنصات متحركة2الأزرار والشاشات
الأزرار وonClickالتعبيرات Lambdaالربط في Inspectorتشغيل اللوحات وإيقافهاأشرطة الصحةمراجعة: متجر الترقيات5الحفظ باستخدام PlayerPrefs
حفظ رقمالتحميل بقيمة افتراضيةأعلى نتيجةحفظ الإعداداتمراجعة: العملات في البنك6مشروع: عدّاء لا نهاية له
ثلاثة مساراتعقبات أمامكتدرّب بنفسك: Playground لـ Unity