Heim > Technologie-Peripheriegeräte > IT Industrie > Bauen eines Pong -Klons in Einheit: UI und Gameplay

Bauen eines Pong -Klons in Einheit: UI und Gameplay

Lisa Kudrow
Freigeben: 2025-02-19 11:30:13
Original
829 Leute haben es durchsucht

Dieses Tutorial verbessert einen grundlegenden Pong-Klon, der in der Einheit eingebaut ist und eine klassische Pong-Ästhetik, eine verbesserte Gameplay-Mechanik und eine UI im Retro-Stil hinzufügt. Lassen Sie uns unser Pong -Spiel aktualisieren!

Teil 2: Retro Revamp & Enhanced Gameplay

Dieses Tutorial baut auf dem vorherigen Pong -Klon auf. Laden Sie das Projekt aus GitHub oder vollständiger Teil 1 herunter, bevor Sie fortfahren. Eine funktionierende Demo und das endgültige verbesserte Spiel sind ebenfalls verfügbar.

Schlüsselverbesserungen:

  • Klassisches Styling: Schwarz -Weiß -Sprites importieren, Pixel pro Einheit (bis 64) für authentische Retro -Visuals einstellen. Ändern Sie den Hauptkameras -Hintergrund in Schwarz und aktualisieren Sie Paddel- und Ballsprites entsprechend. Erstellen Sie einen zentralen Teiler mit mehreren skalierten weißen Sprites.
  • Verbesserte Kollisionen: Umgang mit der Kugelkollision zur Berechnung der Schlagwinkel auf Paddeln, wodurch Realistischer wird. Dies beinhaltet die Aktualisierung der BallController -Skript -Methode, um die Funktion OnCollisionEnter2D zu verwenden. Denken Sie daran, den Spieler und die feindlichen Paddel angemessen zu markieren. launchAngle
  • Verbesserte feindliche AI: glatte feindliche Paddelbewegung mit zeitbasierten Berechnungen, die Reaktionsfähigkeit und Herausforderung verbessert. Ändern Sie das Skript , um EnemyController zu verwenden, wobei die Geschwindigkeit und das Timing für eine optimale Glätte angepasst werden. Fügen Sie Grenzen hinzu, um zu verhindern, dass das KI-Paddel außerhalb des Bildschirms geht. Das Skript InvokeRepeating("Move", .02F, .02F) sollte die Position des Feindpaddels nach der Zerstörung des Balls zurücksetzen. BoundsController
  • Menü Retro Pause: Erstellen Sie ein Pausemenü mit einer benutzerdefinierten Pixel -Schriftart (wie Siebdruck). Fügen Sie Schaltflächen "Reset" und "Hauptmenü" mit entsprechenden Funktionen ein. Das Skript verwaltet die Pause und Wiederaufnahme sowie Menüelemente an. Stellen Sie sicher, dass Sie die Pause -Menüelemente mit "Showonpause" markieren. UIManager
  • Dynamisches Hauptmenü: Entwerfen Sie ein Hauptmenü mit simuliertem AI -Gameplay im Hintergrund. Duplizieren Sie die Hauptspielszene, entfernen Sie unnötige Elemente und fügen Sie einen Titel und "Play" -Button hinzu. Verwenden Sie die Skripte und AutoPlayer (ähnlich der feindlichen KI, jedoch mit Anpassungen für Geschwindigkeit und Timing), um die AI -Paddel im Hauptmenü zu steuern. AutoEnemy
  • Bewertungssystem: Implementieren Sie ein Bewertungssystem, das Player- und KI ) ist erreicht und zeigt ein Spiel über dem Bildschirm an. Das Skript zeigt den Gewinner an. Denken Sie daran, das Spiel über Elemente mit "Showonfinish" zu markieren. PointCounter GameOver

Building a Pong Clone in Unity: UI and Gameplay

Code -Snippets:

(BallController.cs - OnCollisionEnter2d & Launchangle)

void OnCollisionEnter2D(Collision2D col) {
    if (col.gameObject.tag == "Enemy") {
        float y = launchAngle(transform.position, col.transform.position, col.collider.bounds.size.y);
        Vector2 d = new Vector2(1, y).normalized;
        rig2D.velocity = d * speed * 1.5F;
    }
    if (col.gameObject.tag == "Player") {
        float y = launchAngle(transform.position, col.transform.position, col.collider.bounds.size.y);
        Vector2 d = new Vector2(-1, y).normalized;
        rig2D.velocity = d * speed * 1.5F;
    }
}

float launchAngle(Vector2 ball, Vector2 paddle, float paddleHeight) {
    return (ball.y - paddle.y) / paddleHeight;
}
Nach dem Login kopieren

(fegeemyController.cs - Bewegung)

void Move() {
    if (ball == null) {
        ball = GameObject.FindGameObjectWithTag("Ball").transform;
    }
    ballRig2D = ball.GetComponent<Rigidbody2D>();
    if (ballRig2D.velocity.x > 0) {
        if (ball.position.y > this.transform.position.y + .5F) {
            transform.Translate(Vector3.up * speed * Time.deltaTime);
        } else if (ball.position.y < this.transform.position.y - .5F) {
            transform.Translate(Vector3.down * speed * Time.deltaTime);
        }
    }
    // ... bounds checking ...
}
Nach dem Login kopieren

(uimanager.cs - partiell)

// ... other methods ...

public void showFinished() {
    foreach (GameObject g in finishObjects) {
        g.SetActive(true);
    }
}

// ... other methods ...
Nach dem Login kopieren

(pointcounter.cs)

void Update () {
    text.text = rightBound.GetComponent<BoundController>().enemyScore + "\t\t" +
                leftBound.GetComponent<BoundController>().playerScore;
}
Nach dem Login kopieren

(GameOver.cs)

void Update () {
    if(uiManager.playerWon){
        text.text = "GAME OVER!\nPLAYER WON!";
    } else if(uiManager.enemyWon){
        text.text = "GAME OVER!\nENEMY WON!";
    }
}
Nach dem Login kopieren

Denken Sie daran, Werte wie Geschwindigkeit und Timing in den AI-Skripten anzupassen, um die Schwierigkeitsgrad des Gameplays zu optimieren. Dieser verbesserte Pong -Klon bietet ein umfassenderes und ansprechenderes Retro -Spielerlebnis. Der GitHub -Link (nicht in der Eingabe angegeben) würde die vollständigen Projektdateien enthalten.

Das obige ist der detaillierte Inhalt vonBauen eines Pong -Klons in Einheit: UI und Gameplay. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage