Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Створення Головного Меню | Покращення гри
Бійцівська гра в Unity

bookСтворення Головного Меню

Головне меню

Скрипт для головного меню

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?

question mark

Що відбувається, коли викликається метод FinishGame у класі GameManager?

Select the correct answer

question mark

Що відбувається, коли GameManager змінює стан гри на GameStates.Finished?

Select the correct answer

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 4. Розділ 3

Запитати АІ

expand

Запитати АІ

ChatGPT

Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат

Awesome!

Completion rate improved to 3.33

bookСтворення Головного Меню

Свайпніть щоб показати меню

Головне меню

Скрипт для головного меню

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?

question mark

Що відбувається, коли викликається метод FinishGame у класі GameManager?

Select the correct answer

question mark

Що відбувається, коли GameManager змінює стан гри на GameStates.Finished?

Select the correct answer

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 4. Розділ 3
some-alt