מתרסקים ומתחילים מחדש
חלק מהיחידה בונים משחקים אמיתיים במסלול ה-Unity של Coddy. שיעור 31 מתוך 56.
אתגר
בינוניהתנגשות מסיימת את הריצה, וכפתור מתחיל את הריצה הבאה. שמור על כל מה שנוסף בשיעורים הקודמים. על המשטח יש GameOverPanel מוסתר עם RestartButton שכותרתו Run again, והסצנה ממלאת שני שדות חדשים ב-GameManager: gameOverPanel ו-restartButton. ל-Runner יש Rigidbody קינמטי, ולכן הוא מקבל הודעות הפעלה של טריגר מהמכשולים.
ב-GameManager:
- מעל המחלקה, הכרז על
public enum GameState { Playing, GameOver }, והוסף למחלקה שדהpublic GameState stateשמתחיל ב-Playing. - הוסף
using UnityEngine.UI;,using UnityEngine.SceneManagement;,public GameObject gameOverPanel;ו-public Button restartButton;. - מתודה ציבורית
GameOver()משנה אתstateל-GameOver, משנה אתspeedל-0, וכך עוצרת את כל המכשולים, ומציגה את הלוח. Update()לא עושה דבר אלא אם המצב הואPlaying, ולכן המהירות והמרחק נעצרים.- ב-
Start(), הגדר אתrestartButtonכך שיטען מחדש את הסצנה שפועלת.
ב-Runner: כשנכנסים לטריגר שמתויג Obstacle, קוראים ל-GameManager.Instance.GameOver(). כל עוד המצב אינו Playing, החצים לא עושים דבר.
ב-Spawner: אל תיצור מכשולים כל עוד המצב אינו Playing.
לחץ על Play, התרסק ורוץ שוב, ואז לחץ על Check.
נסו בעצמכם
using UnityEngine;
using TMPro;
public class GameManager : MonoBehaviour
{
public static GameManager Instance;
public float speed = 10f;
public float speedUp = 0.5f;
public float maxSpeed = 20f;
public TMP_Text distanceText;
private float distance;
void Awake()
{
Instance = this;
}
void Update()
{
speed = Mathf.Min(speed + speedUp * Time.deltaTime, maxSpeed);
distance += speed * Time.deltaTime;
distanceText.text = "Distance: " + Mathf.FloorToInt(distance) + " m";
}
}
כל השיעורים ביחידה בונים משחקים אמיתיים
10פרויקט: משחק פלטפורמה תלת־ממדי
המסלולפלטפורמות נעות2כפתורים ומסכים
כפתורים ו-onClickביטויי למבדהחיבור ב-Inspectorהפעלה וכיבוי של פאנליםפסי בריאותסיכום: חנות שדרוגים6פרויקט: רץ ללא סוף
שלושה נתיביםמכשולים לפניך