Samouczek dotyczący minimapy typu przegląd dla Unity

Poziomy gry mają wiele kształtów i form, od prostych poziomów 2D po bardziej złożone poziomy 3D, z rozległymi przestrzeniami i korytarzami.

Minimapa to miniaturowa mapa umieszczana zwykle w rogu ekranu i często używana w grach wideo, aby pomóc graczom poruszać się po poziomie gry.

W tym samouczku pokażę, jak zrobić okrągłą minimapę w Unity, używając UI canvas.

Kroki

Jako kontroler odtwarzacza będę używać tego kontrolera FPS.

Aby utworzyć minimapę, wykonaj poniższe czynności:

  • Otwórz Scenę ze swoim poziomem gry
  • Utwórz nowe płótno interfejsu użytkownika, jeśli go nie masz (GameObject -> UI -> Canvas)
  • Utwórz nowy obraz, klikając prawym przyciskiem myszy Canvas -> Interfejs użytkownika -> Obraz
  • Przypisz poniższego duszka do obrazu (kliknij prawym przyciskiem myszy, aby pobrać obraz)

okrągły projekt obramowania minimapy

  • Zmień wyrównanie obrazu do lewego górnego rogu i obrót na (0, 1)

  • Utwórz nowy obraz surowy, klikając Płótno -> Interfejs użytkownika -> Obraz surowy (Upewnij się, że obraz surowy jest umieszczony przed obrazem radarowym w hierarchii, aby był renderowany z tyłu).

  • Utwórz nową kamerę, nadaj jej nazwę "Minimap_Camera", umieść ją nad odtwarzaczem i skieruj w dół
  • Usuń słuchacza audio z "Minimap_Camera"
  • Utwórz nową teksturę renderowania (w widoku projektu Utwórz -> Renderuj teksturę) i nadaj jej nazwę "MinimapTexture"
  • Przypisz nowo utworzoną teksturę renderowania do tekstury "Minimap_Camera" docelowej

  • Przypisz "MinimapTexture" do tekstury obrazu surowego

Teraz musimy dodać maskę sprite'a, aby obraz był ładnie przycięty:

  • Zduplikuj obraz radarowy
  • Zmień teksturę zduplikowanego obrazu na ikonkę poniżej (kliknij prawym przyciskiem myszy, aby pobrać obraz):

szare kółko przezroczyste

  • Dodaj komponent Maska do obrazu maski

  • Przesuń surowy obraz z teksturą renderowania wewnątrz obrazu maski

Ostateczny obraz powinien zostać teraz przycięty:

Jak widać, kamera minimapy pokazuje mapę taką, jaka jest, łącznie z graczem i wszystkimi obiektami dynamicznymi, ale nie o to nam chodzi, chcemy pokazać tylko mapę bez żadnych dynamicznych obiektów.

  • Zrób zrzut ekranu widoku mapy z góry (przed wykonaniem tej czynności dezaktywuj wszelkie obiekty dynamiczne, takie jak gracze, wrogowie itp.)

  • Utwórz nowy Quad (GameObject -> Obiekt 3D -> Quad) i umieść go pod mapą w następujący sposób:

  • Przypisz zrzut ekranu do Quada i zmień Shader materiału na "Unlit/Texture"
  • Upewnij się, że pozycja zrzutu ekranu na Quad jest zgodna z mapą:

  • Zmień warstwę minimapy Quad na "UI"
  • W "Minimap_Camera" zmień maskę uboju na "UI"
  • Utwórz kolejny Quad i przenieś go do obiektu "Minimap_Camera", przypisz do niego poniższy obrazek:

  • Zmień Shader na strzałce Quad na "Unlit/Transparent"

  • Zmień strzałkę Quad Layer na "UI"

Oto końcowy wynik:

  • Utwórz nowy skrypt, nazwij go "SC_MinimapCamera" i wklej w nim poniższy kod:

SC_MinimapCamera.cs

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

public class SC_MinimapCamera : MonoBehaviour
{
    public Transform target;

    float defaultPosY;

    // Start is called before the first frame update
    void Start()
    {
        defaultPosY = transform.position.y;
    }

    // Update is called once per frame
    void Update()
    {
        // Apply position
        transform.position = new Vector3(target.position.x, defaultPosY, target.position.z);
        // Apply rotation
        transform.rotation = Quaternion.Euler(90, target.eulerAngles.y, 0);
    }
}
  • Dołącz skrypt SC_MinimapCamera do obiektu "Minimap_Camera".
  • Przypisz swojego gracza do zmiennej Target w SC_MinimapCamera.

Minimapa jest już gotowa, aby z niej skorzystać wystarczy przejść się po poziomie i obserwować zmianę pozycji.

Sharp Coder Odtwarzacz wideo