Wdrażanie warunku zwycięstwa w Unity

W wielu grach jasny warunek wygranej jest niezbędny do określenia, kiedy gracz odniósł sukces. W tym samouczku zaimplementujemy prosty warunek wygranej w Unity. Ten warunek sprawdzi, czy gracz spełnia określone kryteria (np. zbiera przedmioty, pokonuje wrogów lub dociera do celu) i uruchomi stan wygranej, gdy te warunki zostaną spełnione.

1. Określ warunki zwycięstwa

Przed wdrożeniem systemu musimy zdefiniować, co stanowi wygraną w grze. W tym przykładzie założymy, że gracz wygrywa, zbierając wszystkie wymagane przedmioty na poziomie. Możesz to zmodyfikować, aby dopasować do innych typów gry, takich jak pokonanie wrogów lub ukończenie celu.

2. Utwórz Menedżera Win

Skrypt WinManager zajmie się logiką sprawdzania warunku wygranej. Stworzymy system, który sprawdza, czy gracz zebrał wszystkie niezbędne przedmioty, a gdy to się stanie, wywoła zdarzenie wygranej.

using UnityEngine;

public class WinManager : MonoBehaviour
{
    public int totalItems = 5; // Total number of items needed to win
    private int collectedItems = 0; // Counter for collected items

    // Call this method when the player collects an item
    public void CollectItem()
    {
        collectedItems++;
        Debug.Log("Item collected. " + collectedItems + "/" + totalItems);

        // Check if the player has collected all items
        if (collectedItems >= totalItems)
        {
            WinGame();
        }
    }

    // This method is called when the player wins
    private void WinGame()
    {
        Debug.Log("You win!");
        // Here you can add more win logic like displaying a UI or stopping the game
        // For example, load a win scene:
        // SceneManager.LoadScene("WinScene");
    }
}

Ten skrypt WinManager śledzi, ile przedmiotów zebrał gracz. Gdy gracz zbierze wszystkie przedmioty (lub spełni warunek wygranej), wywoływana jest metoda WinGame(), wyświetlając prosty komunikat „Wygrywasz!”. Możesz łatwo rozszerzyć to, aby wyświetlić ekran wygranej lub przejść do nowej sceny.

3. Konfigurowanie systemu zbierania przedmiotów

Teraz stworzymy system, który pozwoli graczowi zbierać przedmioty. Można to zrobić, wykrywając, kiedy gracz zderza się z przedmiotami kolekcjonerskimi.

using UnityEngine;

public class CollectibleItem : MonoBehaviour
{
    public WinManager winManager;

    // When the player collides with the item, it is collected
    private void OnTriggerEnter(Collider other)
    {
        if (other.CompareTag("Player"))
        {
            winManager.CollectItem(); // Notify the WinManager
            Destroy(gameObject); // Remove the collected item from the scene
        }
    }
}

Ten skrypt wykrywa, kiedy gracz zderzy się z przedmiotem i informuje WinManager, że przedmiot został zebrany. Po zebraniu przedmiotu jest on niszczony ze sceny.

4. Implementacja interfejsu użytkownika dla warunku wygranej

Ważne jest, aby gracz wiedział, kiedy wygrał. Stworzymy prosty interfejs użytkownika, aby wyświetlić wiadomość, gdy gracz zbierze wszystkie przedmioty.

  1. Utwórz obiekt Canvas na scenie (GameObject > UI > Canvas).
  2. Dodaj element Tekst do obszaru roboczego, aby wyświetlić komunikat „Wygrywasz!”.
  3. W skrypcie WinManager odwołaj się do tego elementu Tekst i zaktualizuj jego widoczność, gdy gracz wygrywa.
using UnityEngine;
using UnityEngine.UI;

public class WinManager : MonoBehaviour
{
    public int totalItems = 5;
    private int collectedItems = 0;
    public Text winText; // Reference to the "You Win!" text UI

    public void CollectItem()
    {
        collectedItems++;
        Debug.Log("Item collected. " + collectedItems + "/" + totalItems);

        if (collectedItems >= totalItems)
        {
            WinGame();
        }
    }

    private void WinGame()
    {
        Debug.Log("You win!");
        winText.text = "You Win!"; // Show the win message
        winText.gameObject.SetActive(true); // Make the message visible
        Time.timeScale = 0; // Stop the game (optional)
    }
}

W powyższym kodzie, gdy gracz wygrywa, komponent tekstowy winText zostaje zaktualizowany, aby wyświetlić komunikat „Wygrywasz!”, a gra zostaje wstrzymana za pomocą Time.timeScale = 0;.

5. Testowanie warunku wygranej

Zagraj w grę i sprawdź, czy warunek wygranej zostanie uruchomiony, gdy gracz zbierze wszystkie przedmioty. Na ekranie powinien pojawić się komunikat „You Win!”, a gra zostanie wstrzymana. Jeśli używasz przejścia sceny, możesz również załadować nową scenę, aby wskazać, że gra się zakończyła.

Rozszerzanie Warunków Wygranej

W zależności od rodzaju gry, warunki wygranej można rozszerzyć o dodatkowe czynniki:

  • Pokonanie wszystkich wrogów na danym poziomie.
  • Dotarcie do określonego miejsca w określonym czasie.
  • Wykonanie serii zadań lub celów.

Warunki te można dodać w podobny sposób, tworząc nowe skrypty lub modyfikując WinManager w celu uwzględnienia różnych scenariuszy.

Wniosek

Wprowadziliśmy prosty warunek wygranej w Unity oparty na zbieraniu przedmiotów. Ten system jest elastyczny i można go łatwo dostosować do innych mechanizmów gry. Dzięki dodaniu interfejsu użytkownika i właściwego przepływu gry masz teraz podstawową strukturę do wyzwalania warunków wygranej w swojej grze.