Створення Головного Меню
Головне меню
Скрипт для головного меню
using UnityEngine;
using UnityEngine.SceneManagement;
public class MainUI : MonoBehaviour
{
public void StatTheGame()
{
SceneManager.LoadScene(1);
}
public void Quit()
{
Application.Quit();
}
}
Клас MainUI
— це простий скрипт, який забезпечує функціональність запуску гри та виходу з додатку. Цей скрипт призначений для використання з UI-кнопками в Unity.
Опис класу та методів
Метод StatTheGame
призначений для запуску гри шляхом завантаження нової сцени. Зокрема, SceneManager.LoadScene(1)
вказує Unity завантажити сцену з індексом збірки 1
, що відповідає її позиції у Build Settings.
Метод Quit
дозволяє закрити додаток, викликаючи Application.Quit()
, хоча ця функціональність працює лише у зібраному додатку, а не в Unity Editor.
Використання в Unity
Прикріплення скрипта
Створіть GameObject (наприклад, порожній GameObject або елемент UI).
Прикріпіть скрипт MainUI
до GameObject, перетягнувши скрипт на нього або використовуючи кнопку Add Component
в Інспекторі.
Налаштування UI-кнопок
Створіть UI-кнопку (наприклад, GameObject > UI > Button
).
Виберіть кнопку та перейдіть до Інспектора.
У секції On Click ()
натисніть кнопку +
, щоб додати нову подію.
Перетягніть GameObject із прикріпленим скриптом MainUI
у поле об'єкта.
У випадаючому списку виберіть MainUI > functionName
.
Game Manager
Скрипт для Game Manager
public class GameManager : MonoBehaviour
{
public GameStates GameState { private set; get; }
public static event System.Action<GameStates> onGameStateChanges;
public static GameManager instance;
void Awake()
{
if (instance != null)
{
Destroy(gameObject);
return;
}
instance = this;
DontDestroyOnLoad(gameObject);
}
void Start()
{
GameState = GameStates.Playing;
onGameStateChanges?.Invoke(GameState);
}
public void FinishGame()
{
GameState = GameStates.Finished;
onGameStateChanges?.Invoke(GameState);
}
}
public enum GameStates
{
Playing,
Finished,
}
Клас GameManager
відповідає за керування станом гри. Він використовує патерн синглтон для забезпечення існування лише одного екземпляра GameManager
у грі, керує станом гри та розсилає зміни стану за допомогою подій.
Визначення класу та змінні-члени
Методи
Метод Awake
void Awake()
{
if (instance != null)
{
Destroy(gameObject);
return;
}
instance = this;
DontDestroyOnLoad(gameObject);
}
Призначення: Гарантує, що існує лише один екземпляр GameManager
і запобігає його знищенню при завантаженні нових сцен.
Патерн Singleton: Перевіряє, чи вже існує екземпляр. Якщо так, знищує дубльований об'єкт. В іншому випадку призначає екземпляр і позначає об'єкт як такий, що не знищується при завантаженні нової сцени.
Метод Start
void Start()
{
GameState = GameStates.Playing;
onGameStateChanges?.Invoke(GameState);
}
Призначення: Ініціалізує стан гри як Playing
при старті гри та викликає подію onGameStateChanges
.
Метод FinishGame
public void FinishGame()
{
GameState = GameStates.Finished;
onGameStateChanges?.Invoke(GameState);
}
Призначення: Встановлює стан гри як Finished
та викликає подію onGameStateChanges
.
Перерахування GameStates
public enum GameStates
{
Playing,
Finished,
}
Призначення: Визначає можливі стани гри.
Реакція ворога на зміну стану гри
private void GameManager_onGameStateChanges(GameStates state)
{
if (state == GameStates.Finished)
{
stateManager.ChangeState(idle);
}
}
Цей метод обробляє зміну стану гри. Коли стан гри змінюється на Finished
, стан ворога змінюється на idle
.
Панель завершення
Скрипт для панелі завершення
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using TMPro;
using UnityEngine.SceneManagement;
public class FinishPanel : MonoBehaviour
{
[SerializeField] Player player;
[SerializeField] GameObject panel;
[SerializeField] TMP_Text infoText;
private void Start()
{
GameManager.onGameStateChanges += GameManager_onGameStateChanges;
}
private void GameManager_onGameStateChanges(GameStates obj)
{
if (obj == GameStates.Finished)
{
panel.SetActive(true);
OnGameFinished();
}
}
void OnGameFinished()
{
if (player.isDead)
{
infoText.text = "You lost";
infoText.color = Color.red;
}
else
{
infoText.text = "You Won";
infoText.color = Color.green;
}
}
public void BackToMainMenu()
{
SceneManager.LoadScene(0);
}
public void Quit()
{
Application.Quit();
}
}
Клас FinishPanel
відповідає за відображення та функціонал панелі завершення, яка з'являється після закінчення гри. Ця панель надає гравцеві інформацію про перемогу або поразку, а також пропонує варіанти повернення до головного меню або виходу з гри.
Пояснення
Методи
Метод Start
private void Start()
{
GameManager.onGameStateChanges += GameManager_onGameStateChanges;
}
Призначення: Підписка на подію GameManager.onGameStateChanges
для відстеження змін стану гри.
Метод GameManager_onGameStateChanges
private void GameManager_onGameStateChanges(GameStates obj)
{
if (obj == GameStates.Finished)
{
panel.SetActive(true);
OnGameFinished();
}
}
Призначення: Обробка змін стану гри. Коли стан гри — Finished
, активується фінальна панель і викликається OnGameFinished
.
Метод OnGameFinished
void OnGameFinished()
{
if (player.isDead)
{
infoText.text = "You lost";
infoText.color = Color.red;
}
else
{
infoText.text = "You Won";
infoText.color = Color.green;
}
}
Призначення: Оновлення тексту фінальної панелі залежно від того, чи гравець загинув, чи залишився живим.
Логіка: Якщо гравець загинув, метод встановлює текст "You lost" червоним кольором. Якщо гравець живий — текст "You Won" зеленим кольором.
Метод BackToMainMenu
public void BackToMainMenu()
{
SceneManager.LoadScene(0);
}
Призначення: Завантажує сцену головного меню (build index 0) при виклику. Цей метод призначений для зв'язку з кнопкою в інтерфейсі користувача.
Метод Quit
public void Quit()
{
Application.Quit();
}
Призначення: Завершує роботу застосунку при виклику. Цей метод призначений для зв'язку з кнопкою в інтерфейсі користувача.
Підсумок
Клас FinishPanel
відображає результати завершення гри та надає опції повернення до головного меню або виходу. Він підписується на GameManager.onGameStateChanges
для відповідного оновлення після завершення гри, покращуючи взаємодію з користувачем завдяки зрозумілому зворотному зв'язку та інтуїтивним опціям.
1. Що відбувається, коли викликається метод FinishGame
у класі GameManager
?
2. Що відбувається, коли GameManager
змінює стан гри на GameStates.Finished
?
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат
Awesome!
Completion rate improved to 3.33
Створення Головного Меню
Свайпніть щоб показати меню
Головне меню
Скрипт для головного меню
using UnityEngine;
using UnityEngine.SceneManagement;
public class MainUI : MonoBehaviour
{
public void StatTheGame()
{
SceneManager.LoadScene(1);
}
public void Quit()
{
Application.Quit();
}
}
Клас MainUI
— це простий скрипт, який забезпечує функціональність запуску гри та виходу з додатку. Цей скрипт призначений для використання з UI-кнопками в Unity.
Опис класу та методів
Метод StatTheGame
призначений для запуску гри шляхом завантаження нової сцени. Зокрема, SceneManager.LoadScene(1)
вказує Unity завантажити сцену з індексом збірки 1
, що відповідає її позиції у Build Settings.
Метод Quit
дозволяє закрити додаток, викликаючи Application.Quit()
, хоча ця функціональність працює лише у зібраному додатку, а не в Unity Editor.
Використання в Unity
Прикріплення скрипта
Створіть GameObject (наприклад, порожній GameObject або елемент UI).
Прикріпіть скрипт MainUI
до GameObject, перетягнувши скрипт на нього або використовуючи кнопку Add Component
в Інспекторі.
Налаштування UI-кнопок
Створіть UI-кнопку (наприклад, GameObject > UI > Button
).
Виберіть кнопку та перейдіть до Інспектора.
У секції On Click ()
натисніть кнопку +
, щоб додати нову подію.
Перетягніть GameObject із прикріпленим скриптом MainUI
у поле об'єкта.
У випадаючому списку виберіть MainUI > functionName
.
Game Manager
Скрипт для Game Manager
public class GameManager : MonoBehaviour
{
public GameStates GameState { private set; get; }
public static event System.Action<GameStates> onGameStateChanges;
public static GameManager instance;
void Awake()
{
if (instance != null)
{
Destroy(gameObject);
return;
}
instance = this;
DontDestroyOnLoad(gameObject);
}
void Start()
{
GameState = GameStates.Playing;
onGameStateChanges?.Invoke(GameState);
}
public void FinishGame()
{
GameState = GameStates.Finished;
onGameStateChanges?.Invoke(GameState);
}
}
public enum GameStates
{
Playing,
Finished,
}
Клас GameManager
відповідає за керування станом гри. Він використовує патерн синглтон для забезпечення існування лише одного екземпляра GameManager
у грі, керує станом гри та розсилає зміни стану за допомогою подій.
Визначення класу та змінні-члени
Методи
Метод Awake
void Awake()
{
if (instance != null)
{
Destroy(gameObject);
return;
}
instance = this;
DontDestroyOnLoad(gameObject);
}
Призначення: Гарантує, що існує лише один екземпляр GameManager
і запобігає його знищенню при завантаженні нових сцен.
Патерн Singleton: Перевіряє, чи вже існує екземпляр. Якщо так, знищує дубльований об'єкт. В іншому випадку призначає екземпляр і позначає об'єкт як такий, що не знищується при завантаженні нової сцени.
Метод Start
void Start()
{
GameState = GameStates.Playing;
onGameStateChanges?.Invoke(GameState);
}
Призначення: Ініціалізує стан гри як Playing
при старті гри та викликає подію onGameStateChanges
.
Метод FinishGame
public void FinishGame()
{
GameState = GameStates.Finished;
onGameStateChanges?.Invoke(GameState);
}
Призначення: Встановлює стан гри як Finished
та викликає подію onGameStateChanges
.
Перерахування GameStates
public enum GameStates
{
Playing,
Finished,
}
Призначення: Визначає можливі стани гри.
Реакція ворога на зміну стану гри
private void GameManager_onGameStateChanges(GameStates state)
{
if (state == GameStates.Finished)
{
stateManager.ChangeState(idle);
}
}
Цей метод обробляє зміну стану гри. Коли стан гри змінюється на Finished
, стан ворога змінюється на idle
.
Панель завершення
Скрипт для панелі завершення
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using TMPro;
using UnityEngine.SceneManagement;
public class FinishPanel : MonoBehaviour
{
[SerializeField] Player player;
[SerializeField] GameObject panel;
[SerializeField] TMP_Text infoText;
private void Start()
{
GameManager.onGameStateChanges += GameManager_onGameStateChanges;
}
private void GameManager_onGameStateChanges(GameStates obj)
{
if (obj == GameStates.Finished)
{
panel.SetActive(true);
OnGameFinished();
}
}
void OnGameFinished()
{
if (player.isDead)
{
infoText.text = "You lost";
infoText.color = Color.red;
}
else
{
infoText.text = "You Won";
infoText.color = Color.green;
}
}
public void BackToMainMenu()
{
SceneManager.LoadScene(0);
}
public void Quit()
{
Application.Quit();
}
}
Клас FinishPanel
відповідає за відображення та функціонал панелі завершення, яка з'являється після закінчення гри. Ця панель надає гравцеві інформацію про перемогу або поразку, а також пропонує варіанти повернення до головного меню або виходу з гри.
Пояснення
Методи
Метод Start
private void Start()
{
GameManager.onGameStateChanges += GameManager_onGameStateChanges;
}
Призначення: Підписка на подію GameManager.onGameStateChanges
для відстеження змін стану гри.
Метод GameManager_onGameStateChanges
private void GameManager_onGameStateChanges(GameStates obj)
{
if (obj == GameStates.Finished)
{
panel.SetActive(true);
OnGameFinished();
}
}
Призначення: Обробка змін стану гри. Коли стан гри — Finished
, активується фінальна панель і викликається OnGameFinished
.
Метод OnGameFinished
void OnGameFinished()
{
if (player.isDead)
{
infoText.text = "You lost";
infoText.color = Color.red;
}
else
{
infoText.text = "You Won";
infoText.color = Color.green;
}
}
Призначення: Оновлення тексту фінальної панелі залежно від того, чи гравець загинув, чи залишився живим.
Логіка: Якщо гравець загинув, метод встановлює текст "You lost" червоним кольором. Якщо гравець живий — текст "You Won" зеленим кольором.
Метод BackToMainMenu
public void BackToMainMenu()
{
SceneManager.LoadScene(0);
}
Призначення: Завантажує сцену головного меню (build index 0) при виклику. Цей метод призначений для зв'язку з кнопкою в інтерфейсі користувача.
Метод Quit
public void Quit()
{
Application.Quit();
}
Призначення: Завершує роботу застосунку при виклику. Цей метод призначений для зв'язку з кнопкою в інтерфейсі користувача.
Підсумок
Клас FinishPanel
відображає результати завершення гри та надає опції повернення до головного меню або виходу. Він підписується на GameManager.onGameStateChanges
для відповідного оновлення після завершення гри, покращуючи взаємодію з користувачем завдяки зрозумілому зворотному зв'язку та інтуїтивним опціям.
1. Що відбувається, коли викликається метод FinishGame
у класі GameManager
?
2. Що відбувається, коли GameManager
змінює стан гри на GameStates.Finished
?
Дякуємо за ваш відгук!