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)
- 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):
- 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.