Unity-Entwicklungstagebuch [Tag 10] – Parallaxe, Hauptschnittstelle und Pausenmenü

Inhaltsverzeichnis

1. Visueller Unterschied

2. Hauptmenü

3. Pausenmenü 


1. Visueller Unterschied

Versuchen Sie heute, eine lustige Funktion Parallax (Parallaxe) in das Spiel zu implementieren, die einfach gesagt dazu führen kann, dass sich verschiedene Ebenen mit unterschiedlichen Geschwindigkeiten bewegen und vielschichtiger erscheinen.

Da wir das Hintergrundbild manipulieren müssen, erstellen wir zunächst ein neues Spielobjekt, bei dem der Collider zum Hintergrundbild hinzugefügt wird, um eine Kameraverfolgung zu erreichen, und löschen dann den Collider des Hintergrundbilds, um unnötige Probleme zu vermeiden. Dann schreiben wir den Code, um den Parallax-Effekt zu realisieren. Dieser Code verwendet die Variable Cam, um die Bewegung der Kamera zu erhalten. Wenn sich die Position der Kamera ändert, bewegt sich das Objekt, das diesen Code verwendet, mit der Geschwindigkeit von MoveRate

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

public class Parallax : MonoBehaviour
{
    public Transform Cam; //获得摄像机的位置
    public float MoveRate;  //移动的速度
    private float StartPoint; //初始位置

    void Start()
    {
        StartPoint = transform.position.x; //获得当前物体的坐标
    }

    
    void Update()
    {
        transform.position = new Vector2(StartPoint + Cam.position.x * MoveRate, transform.position.y); //移动
    }
}

Wir ziehen den Code per Drag & Drop auf das Hintergrundbild, fügen dann die entsprechenden Variablen hinzu und stellen die Geschwindigkeit ein (die Kamera kann als Hauptkamera eingestellt werden), damit wir die Funktion realisiert haben.

2. Hauptmenü

Das Spiel wurde im Wesentlichen implementiert. Jetzt werden wir versuchen, das Hauptmenü-Interface des Spiels (das Spielstart-Interface) zu implementieren. Wir müssen eine neue Szene erstellen, um dieses Interface zu erstellen. Wir müssen hauptsächlich eine Benutzeroberfläche erstellen, um sie zu erstellen Befolgen Sie die gleichen Schritte Im vorherigen UI-Produktionsprozess müssen wir zuerst eine Leinwand erstellen und dann ein Panel (Panel) darauf erstellen

Was ist ein Panel?

Panel wird auch als Panel-Komponente bezeichnet, die im Wesentlichen ein Container ist, auf dem andere UI-Elemente platziert werden können. Wenn wir das Panel anpassen, bewegen sich auch andere Elemente im Container.

Aber das Panel ist ein abgerundetes Rechteck, das den Hintergrund unten zeigt. Der erste Schritt, den wir zur Lösung dieses Problems benötigen, besteht darin, das Originalbild dafür in der Panel-Oberfläche festzulegen. Wenn nicht, kann es auf None gesetzt werden, ich habe es verwendet ein Teil meines Spiels hier Machen Sie einen Screenshot und passen Sie dann die Beleuchtung an, um sie realistischer zu machen

Dann erstellen wir ein neues Panel, um die Schaltflächen zu hosten, und wir können auch einen Farbverlauf für das Hintergrundbild erstellen, das endgültige Rendering:

Dann müssen wir die Schaltfläche UI > in diesem Bereich hinzufügen, um die Schnittstelle des Hauptmenüs zu erstellen.

Hier habe ich einen Fehler gefunden, dass die Benutzeroberfläche nicht adaptiv geändert werden kann, nachdem sich die Bildschirmgröße geändert hat.Die Auswahl des UI-Skalierungsmodus auf der UI-Leinwand zum Skalieren der Bildschirmgröße kann dieses Problem lösen.

Außerdem können die Schriftarten, die ich aus dem Ressourcenspeicher heruntergeladen habe, nur in der alten Text-Version verwendet werden. Wenn wir TextMeshPro (TMP) verwenden möchten, müssen wir entsprechende Schriftarten-Ressourcen generieren. Für den konkreten Vorgang lesen Sie bitte das Folgende Lernprogramm

https://www.bilibili.com/read/cv8395060/

Beachten Sie, dass die TTF-Datei hier gefunden werden muss, bevor sie generiert werden kann, andernfalls wird ein Fehler gemeldet

Klicken Sie dann auf Übernehmen, nachdem Sie die Auflösung geändert haben.

Nachdem wir dann einen neuen Button erstellt haben, werden die Wörter im Button automatisch erstellt. Wir legen die Schriftgröße und -position und die Farbe des Buttons fest, und die Farbe des Buttons wird hier festgelegt.

Wir verwenden die gleiche Methode, um eine andere Schaltfläche zum Beenden des Spiels festzulegen. Anschließend müssen wir den entsprechenden Code mit den beiden Schaltflächen abgleichen, um ihre Funktionen zu realisieren. Wir fügen den Code dem übergeordneten Satz der beiden Schaltflächen hinzu, dh wir haben die erstellt Container, der Code ist derselbe wie bei der vorherigen Idee zum Umschalten der Szene, laden Sie direkt die nächste Szene, der Code lautet wie folgt: (denken Sie daran, die Header-Datei der Szenenverwaltung hinzuzufügen)

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

public class Menu : MonoBehaviour
{
    public void StartGame() //开始游戏
    {
        SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex + 1); //加载下一个场景
    }

    public void Exit() //退出游戏
    {
        Application.Quit();
    }
}

Dann, nachdem wir den Code auf dem Container gemountet haben, finden wir den Button, der das Spiel startet, und am unteren Rand des Inspektors können wir sehen

Im folgenden Fenster klicken wir auf das Pluszeichen 

 

Dann rufen wir die Funktion StartGame im Skript von MainMenu auf, wenn mit der Maus geklickt wird

Vergessen Sie nicht, die aktuelle Szene vor dem Testen zum Spiel hinzuzufügen (obere linke Ecke: Datei > Build-Einstellungen).

Dann machen wir eine allmähliche Animation für den Hintergrund, was dem vorherigen Prozess des Ein- und Ausblendens des Dialogfelds entspricht, daher werde ich hier nicht ins Detail gehen. Denken Sie nur daran, die Schleifenzeit auszuschalten, um zu verhindern, dass sie ständig wiederholt wird. Als nächstes hoffen wir, dass unser Text nicht erscheint, bis diese Ausblendanimation abgespielt wird. Erstellen Sie ein neues Objekt, wir setzen den Titel und die Schaltfläche darunter, wir müssen nur anpassen, ob es verwendet wird oder nicht, wir können das Erscheinen und Verschwinden der Benutzeroberfläche steuern.

Lassen Sie uns dann den Code schreiben, der die Funktion implementiert.

public GameObject UI;

public void UIEnable()
{
    UI.SetActive(true);
}

 Wir ziehen das UI-Objekt an die entsprechende Position

Schließlich fügen wir wie zuvor ein Ereignis am Ende der Animation hinzu, um diese Funktion aufzurufen.

3. Pausenmenü 

 Wie zuvor müssen wir zuerst ein neues Panel erstellen und anschließend eine Benutzeroberfläche darauf erstellen.

Erstellen Sie dann eine Schaltfläche, um das Aufwachen der Schnittstelle auszusetzen (diese Schaltfläche wird nicht auf dem Bedienfeld platziert, da sie das Bedienfeld aufweckt).

Erstellen Sie dann ein neues Panel und erstellen Sie die Return-Schaltfläche, die wir benötigen.Hier habe ich drei Schaltflächen erstellt, die zur aktuellen Spieloberfläche zurückkehren, zur Hauptoberfläche zurückkehren und einen Schieberegler für die Lautstärkeregelung.

 

 Am Ende habe ich es wahrscheinlich so gemacht, der Schieberegler enthält drei Untervariablen

 Hintergrund: Der Hintergrund des Schiebereglers

Füllbereich: der Teil, der darüber gleitet

Griff: die Schaltfläche auf dem Schieberegler

Wir können ihre Farben und andere Eigenschaften auf diesen drei jeweils ändern. Wir haben sie angepasst, also haben wir dieses Panel erstellt und damit gespielt. Als nächstes werden wir mit dem Schreiben von Code beginnen. Die Funktionen der beiden Schaltflächen sind relativ einfach. Ja, die Schaltfläche Um zum Hauptmenü zurückzukehren, kann er direkt das Hauptmenü der Szene laden. Andererseits müssen wir eine Funktion schreiben, um unsere PAUSE-Taste aufzurufen. Der Zweck ist, das Menü des pausierten Spiels in den geschlossenen Zustand zu versetzen Wenn aktiviert, dann braucht die Funktion zum Zurückkehren zum Spiel nur das Menü wieder zu schließen. Der spezifische Code lautet wie folgt:

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

public class PauseMenu : MonoBehaviour
{
    public GameObject Menu;

    public void WakeupMenu() //唤醒暂停菜单
    {
        Menu.SetActive(true);
    }

    public void ReturnMain() //返回主菜单
    {
        SceneManager.LoadScene("Menu"); //返回主菜单
    }

    public void ReturnGame() //返回游戏
    {
        Menu.SetActive(false);
    }
}

 Auf diese Weise werden alle Funktionen der beiden Schaltflächen realisiert, aber zu diesem Zeitpunkt haben wir festgestellt, dass sich das Spiel noch bewegt, wenn das Pausenfenster angezeigt wird. Wir benötigen die Zeit, um das Spiel anzuhalten, sodass wir eine Codezeile hinzufügen müssen in die entsprechende Position, um es zu erreichen.

Time.timeScale = 0f; //暂停游戏时间
Time.timeScale = 1f; //恢复游戏时间

PS: Wir müssen auch die Spielzeit wiederherstellen, wenn wir zur Hauptschnittstelle zurückkehren, sonst bleiben Fehler hängen 

 [Anmerkung] Wir können den Effekt der Zeitbeschleunigung oder -verzögerung erreichen, indem wir diesen Wert ändern

Als nächstes versuchen wir, die Lautstärke durch Schieben der Taste zu regeln.Um diese Funktion zu realisieren, müssen wir einen neuen Audiomixer erstellen

Suchen Sie das Audio Mixer-Fenster im Menü des obigen Fensters

 Der Audiomixer ist eigentlich ein Mixer, jeder Ton kann seinen eigenen Kanal haben und dann im Mixer gesteuert werden, zum Beispiel können wir sehen, dass die Hintergrundmusik, die wir zuvor hinzugefügt haben, keinen Ausgangskanal hat

Wir können es dem Meister hinzufügen

 Auf diese Weise können wir diesen Ton am Audiomischer anpassen. Wir können sehen, dass der Bereich dieses Tons von -80 bis 20 reicht, aber beachten Sie, dass 20 den Ton verstärken soll und es zu Tonartefakten kommen kann, so dass der Bereich möglich ist auch als -80 bis 0 geschrieben werden

 Diesen Bereich weisen wir unserem Slider zu

 Als nächstes müssen wir diese beiden Dinge miteinander verknüpfen, wir kommen zum Code, zuerst müssen wir die Header-Datei hinzufügen

Verwenden von UnityEngine.Audio, damit wir entsprechende Objekte erstellen können

public AudioMixer BGMAudio; //背景音乐

 Dann fügen wir den entsprechenden Audiomixer hinzu

Um den Lautstärkewert mit Code zu ändern, müssen wir zunächst den entsprechenden Eigenschaftscode im Audiomixer bearbeitbar machen

Rufen Sie die im obigen Bild gezeigte Schnittstelle auf, klicken Sie dann mit der rechten Maustaste auf das Volume im Inspektor und klicken Sie dann, um den Code bearbeitbar zu machen, damit wir ihn daneben sehen können (dieser Name kann von Ihnen selbst geändert werden, aber denken Sie bitte daran, dass Sie müssen von)

Wir können also den folgenden Code verwenden, um diesen Wert zu ändern

    public void SetVolume(float value) //音量控制
    {
        Audio.SetFloat("MainVolume", value);
    }

Dann können wir diese Funktion auf der Oberfläche des Schiebereglers aufrufen (beachten Sie, dass wir zwei Funktionen mit demselben Namen zur Auswahl haben, wenn Sie hier eine Funktion auswählen. Bitte beachten Sie, dass wir die obige auswählen müssen und die folgende Auswahl eine Einstellung erfordert eine feste Gleitkommazahl, während die obige automatisch den Wert des Schiebereglers erhält)

 

 Auf die gleiche Weise können wir die Lautstärke aller Spezialeffekte steuern.

Dann habe ich ein Problem gefunden, das heißt, wenn die Szene umgeschaltet wird, stellt sich der Lautstärkeregler wieder her, aber die Lautstärke ändert sich nicht. Also habe ich beschlossen, die Position des Schiebereglers jedes Mal, wenn die Pause-Taste gedrückt wird, mit der aktuellen Lautstärke zu initialisieren

Code zeigen wie folgt:

    public Slider BGMSlider; //背景音乐滑块
    public Slider SoundSlider; //音效音乐滑块

    private float volume; //用以初始化的音量

    public void WakeupMenu() //唤醒暂停菜单
    {
        /* 初始化音量滑块部分的位置 */
        Audio.GetFloat("BGMVolume", out volume);
        BGMSlider.value = volume;
        Audio.GetFloat("SoundVolume", out volume);
        SoundSlider.value = volume;
    }

Acho que você gosta

Origin blog.csdn.net/qq_50688324/article/details/127132201
Recomendado
Clasificación