Samouczek menu głównego dla Unity

Interfejs użytkownika (UI) łączy grafikę, tekst i przyciski i odgrywa kluczową rolę w zapewnianiu przyjemnych wrażeń z gry.

Menu główne to jedna z najbardziej widocznych części interfejsu użytkownika, ponieważ jest to zazwyczaj pierwsza rzecz, którą gracze widzą podczas ładowania gry.

W tym samouczku pokażę, jak utworzyć menu główne w Unity przy użyciu UI Canvas.

Krok 1: Zaprojektuj menu główne

  • Utwórz nowe płótno (GameObject -> UI -> Canvas)

Jedność tworzy płótno

  • Utwórz nowy obraz, klikając prawym przyciskiem myszy Płótno -> Interfejs użytkownika -> Obraz (będzie to tło menu)

Jedność Utwórz obraz na płótnie

  • Przypisz teksturę do nowo utworzonego obrazu. Możesz użyć poniższego obrazu (kliknij prawym przyciskiem myszy -> Zapisz jako...) i upewnij się, że jego Typ tekstury jest ustawiony na 'Sprite (2D and UI)' w Ustawieniach importu:

  • Utwórz nowy skrypt, nadaj mu nazwę SC_BackgroundScaler i wklej do niego poniższy kod:

SC_BackgroundScaler.cs

using UnityEngine;
using UnityEngine.UI;

[ExecuteInEditMode]
public class SC_BackgroundScaler : MonoBehaviour
{
    Image backgroundImage;
    RectTransform rt;
    float ratio;

    // Start is called before the first frame update
    void Start()
    {
        backgroundImage = GetComponent<Image>();
        rt = backgroundImage.rectTransform;
        ratio = backgroundImage.sprite.bounds.size.x / backgroundImage.sprite.bounds.size.y;
    }

    // Update is called once per frame
    void Update()
    {
        if (!rt)
            return;

        //Scale image proportionally to fit the screen dimensions, while preserving aspect ratio
        if(Screen.height * ratio >= Screen.width)
        {
            rt.sizeDelta = new Vector2(Screen.height * ratio, Screen.height);
        }
        else
        {
            rt.sizeDelta = new Vector2(Screen.width, Screen.width / ratio);
        }
    }
}
  • Dołącz skrypt SC_BackgroundScaler do nowo utworzonego obrazu. (Po dołączeniu skrypt automatycznie przeskaluje obraz tła, aby dopasować go do ekranu):

Utwórz przyciski menu:

  • Kliknij prawym przyciskiem myszy Canvas -> Utwórz pusty, a następnie zmień jego nazwę na "MainMenu". Obiekt ten będzie zawierał elementy interfejsu użytkownika dla Menu głównego.
  • Utwórz nowy tekst, klikając prawym przyciskiem myszy obiekt "MainMenu" -> Interfejs użytkownika -> Tekst. To będzie tekst tytułowy.
  • Zmień tekst na nazwę swojej gry (w moim przypadku będzie to "Game Title"):

  • Zmień wyrównanie akapitu na środek i kolor na biały:

  • Na koniec zmień rozmiar czcionki na większy (na przykład 30), a styl czcionki na pogrubiony.

Zauważysz jednak, że tekst zniknął, ponieważ wymiary transformacji prostokątnej są zbyt małe. Zmień je na coś większego (np. Szerokość: 400 Wysokość: 100), również przesuń je nieco w górę, zmieniając Poz Y na 50:

  • Utwórz 3 przyciski (kliknij prawym przyciskiem myszy obiekt "MainMenu" -> Interfejs użytkownika -> Przycisk 3 razy) i przesuń każdy przycisk w dół o 30 pikseli.
  • Zmień tekst każdego przycisku odpowiednio na "Play Now", "Credits" i "Quit":

  • Zduplikuj obiekt "MainMenu" i zmień jego nazwę na "CreditsMenu", usuń wszystkie znajdujące się w nim przyciski z wyjątkiem przycisku "Quit" i zmień jego tekst na "Back".
  • Zmień rozmiar czcionki tytułu Tekst w "CreditsMenu" na mniejszy (np. 14), zmień jego pozycję Y na 0 i wpisz tekst napisów końcowych.

Krok 2: Zaprogramuj przyciski menu

Teraz musimy sprawić, aby przyciski działały, tworząc skrypt.

  • Utwórz nowy skrypt, nazwij go SC_MainMenu, a następnie wklej w nim poniższy kod:

SC_MainMenu.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class SC_MainMenu : MonoBehaviour
{
    public GameObject MainMenu;
    public GameObject CreditsMenu;

    // Start is called before the first frame update
    void Start()
    {
        MainMenuButton();
    }

    public void PlayNowButton()
    {
        // Play Now Button has been pressed, here you can initialize your game (For example Load a Scene called GameLevel etc.)
        UnityEngine.SceneManagement.SceneManager.LoadScene("GameLevel");
    }

    public void CreditsButton()
    {
        // Show Credits Menu
        MainMenu.SetActive(false);
        CreditsMenu.SetActive(true);
    }

    public void MainMenuButton()
    {
        // Show Main Menu
        MainMenu.SetActive(true);
        CreditsMenu.SetActive(false);
    }

    public void QuitButton()
    {
        // Quit Game
        Application.Quit();
    }
}
  • Dołącz SC_MainMenu do obiektu Canvas
  • Przypisz obiekt "MainMenu" do zmiennej Menu główne
  • Przypisz obiekt "CreditsMenu" do zmiennej menu napisów

Ostatnim krokiem jest powiązanie funkcji SC_MainMenu z każdym przyciskiem.

  • Wybierz przycisk i w "On Click ()" kliknij (+), aby dodać nową zmienną elementu:

  • Przypisz obiekt ze skryptem SC_MainMenu (Canvas) do przycisku "On Click ()" i wybierz funkcję odpowiadającą przyciskowi („PlayNowButton()” dla przycisku Odtwórz teraz, "CreditsButton()" dla przycisku Kredyty, "QuitButton()" dla przycisku Zakończ i "MainMenuButton()" do przycisku Wstecz w menu napisów).

Menu główne jest już gotowe.

UWAGA: Funkcja PlayNowButton() w SC_MainMenu.cs podejmie próbę załadowania sceny o nazwie "GameLevel". Upewnij się więc, że masz scenę o nazwie "GameLevel", która jest również dodana do ustawień kompilacji (alternatywnie możesz zmienić nazwę w tej linii, aby odpowiadała nazwie sceny, którą chcesz załadować).

Chcesz dowiedzieć się więcej na temat tworzenia interfejsu użytkownika? Sprawdź nasz tutorial na temat Jak stworzyć mobilne sterowanie dotykowe w Unity.

Źródło
MainMenu.unitypackage149.67 KB