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

اجعله خاصًا بك

الدرس 14 من 14 في دورة لعبة الثعبان ثلاثية الأبعاد في Unity على Coddy.

تبقّت ميزة واحدة: أفضل نتيجة تبقى محفوظة بعد إغلاق اللعبة. تحتفظ بها PlayerPrefs: اقرأها بقيمة افتراضية في Start()، واحفظها عند انتهاء اللعبة إذا تجاوزت النتيجة أفضل نتيجة. تحتفظ لعبة سباق بأفضل لفة بالطريقة المعاكسة، لأن الوقت الأقل أفضل:

if (lapTime < bestLap)
{
    bestLap = lapTime;
    PlayerPrefs.SetFloat("BestLap", bestLap);
}

بعد ذلك، يمكنك ضبط اللعبة كما تريد. تحدد أرقام Snake إحساسها: تجعل قيمة tick ‏0.25 البداية هادئة، وتجعلها قيمة 0.1 سريعة، وتسرّع speedUp ‏0.01 حركة الثعبان في وقت أقرب، وتجعل minTick ‏0.05 نهاية اللعبة محمومة. في هذا الدرس، يكون Inspector الخاص بهذا اللاعب للقراءة فقط، ويترك مشهد الدورة هذه الحقول الثلاثة على القيم الموجودة في الكود، لذا غيّرها في مواضع تعريفها واضغط على Play. في مشروع Unity الخاص بك، غيّرها في مكوّن Snake داخل Inspector: فالقيمة الافتراضية الجديدة في الكود لا تُطبّق على مكوّن موجود بالفعل في أحد المشاهد.

challenge icon

التحدي

صعب
  1. في GameManager، أضف public TMP_Text bestText; (يُعيّنه المشهد إلى BestText، في أعلى اليمين) وprivate int best;.
  2. في Start()، حمّل best من المفتاح BestScore، واجعل قيمته 0 إذا لم يكن هناك شيء محفوظ، واعرضه على شكل Best: 0.
  3. في GameOver()، عندما تتجاوز score قيمة best، اجعلها أفضل نتيجة، واحفظها تحت المفتاح BestScore واعرضها.

اضغط Play، ثم اضغط Check. بعد ذلك العب، واضبط tick وspeedUp وminTick حتى تشعر أن اللعبة مناسبة لك.

جرّب بنفسك

using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
using TMPro;

public class GameManager : MonoBehaviour
{
    public static GameManager Instance;

    public Snake snake;
    public GameObject foodPrefab;
    public TMP_Text scoreText;
    public GameObject gameOverPanel;
    public Button playAgainButton;
    private Transform food;
    private int score;

    void Awake()
    {
        Instance = this;
    }

    void Start()
    {
        scoreText.text = "Score: 0";
        playAgainButton.onClick.AddListener(PlayAgain);
        food = Instantiate(foodPrefab).transform;
        MoveFood();
    }

    public bool IsFood(Vector3 cell)
    {
        return cell == food.position;
    }

    public void Eat()
    {
        score++;
        scoreText.text = "Score: " + score;
        MoveFood();
    }

    public void GameOver()
    {
        gameOverPanel.SetActive(true);
    }

    void PlayAgain()
    {
        SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);
    }

    void MoveFood()
    {
        List<Vector3> free = new List<Vector3>();
        for (int x = -snake.edge; x <= snake.edge; x++)
        {
            for (int z = -snake.edge; z <= snake.edge; z++)
            {
                Vector3 cell = new Vector3(x, 0f, z);
                if (!snake.Occupies(cell))
                {
                    free.Add(cell);
                }
            }
        }
        food.position = free[Random.Range(0, free.Count)];
    }
}
quiz iconاختبر نفسك

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

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