Menu
CoddyTech

הפכו את זה לשלכם

שיעור 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: נחש בתלת־ממד