Rumah > Peranti teknologi > industri IT > Membina klon pong dalam perpaduan: UI dan permainan

Membina klon pong dalam perpaduan: UI dan permainan

Lisa Kudrow
Lepaskan: 2025-02-19 11:30:13
asal
846 orang telah melayarinya

Tutorial ini meningkatkan klon pong asas yang dibina dalam perpaduan, menambah estetika pong klasik, mekanik permainan yang lebih baik, dan UI bergaya retro. Mari kita menaik taraf permainan pong kita!

Bahagian 2: REVAMP REVAMP & GAMEPLAY TENGAH

tutorial ini dibina pada klon pong sebelumnya. Muat turun projek dari GitHub atau Lengkapkan Bahagian 1 sebelum meneruskan. Demo kerja dan permainan yang lebih baik juga disediakan.

Penambahbaikan utama:

  • Gaya klasik: import sprite hitam dan putih, menyesuaikan piksel per unit (hingga 64) untuk visual retro yang sahih. Tukar latar belakang kamera utama menjadi hitam, dan kemas kini dayung dan bola sprite dengan sewajarnya. Buat pembahagi pusat menggunakan pelbagai sprite putih berskala.
  • Perlanggaran yang dipertingkatkan: Memperbaiki pengendalian perlanggaran bola untuk mengira sudut kesan pada paddles, menjadikan melantun lebih realistik. Ini melibatkan pengemaskinian kaedah BallController skrip OnCollisionEnter2D untuk menggunakan fungsi launchAngle. Ingatlah untuk menandakan pemain dan musuh dengan tepat.
  • Pergerakan musuh yang lebih baik: Pergerakan dayung musuh yang lancar menggunakan pengiraan berasaskan masa, meningkatkan respons dan cabaran. Ubah suai skrip EnemyController untuk menggunakan InvokeRepeating("Move", .02F, .02F), menyesuaikan kelajuan dan masa untuk kelancaran optimum. Tambah batas untuk mengelakkan dayung AI dari skrin luar. Skrip BoundsController harus menetapkan semula kedudukan dayung musuh selepas bola dimusnahkan.
  • menu jeda retro: Buat menu jeda menggunakan font piksel tersuai (seperti Silkscreen). Sertakan butang "Reset" dan "Main Menu" dengan fungsi yang sesuai. Skrip UIManager menguruskan berhenti dan menyambung semula, bersama -sama dengan menunjukkan/bersembunyi elemen menu jeda. Pastikan untuk menandakan elemen menu jeda dengan "ShowonPause".
  • Menu Utama Dinamik: Reka bentuk menu utama dengan permainan simulasi AI di latar belakang. Duplikat adegan permainan utama, keluarkan unsur -unsur yang tidak perlu, dan tambahkan tajuk dan butang "Main". Gunakan skrip AutoPlayer dan AutoEnemy (serupa dengan musuh AI tetapi dengan penyesuaian untuk kelajuan dan masa) untuk mengawal paddles AI di menu utama.
  • sistem pemarkahan: Melaksanakan sistem pemarkahan yang menjejaki skor pemain dan AI, memaparkannya pada UI (menggunakan skrip PointCounter), dan mengakhiri permainan apabila had skor (mis., 7 mata ) dicapai, memaparkan permainan melalui skrin. Skrip GameOver memaparkan pemenang. Ingatlah untuk menandakan permainan di atas elemen dengan "Showonfinish".

Building a Pong Clone in Unity: UI and Gameplay

Coretan kod:

(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;
}
Salin selepas log masuk

(enemycontroller.cs - move)

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 ...
}
Salin selepas log masuk

(uimanager.cs - separa)

// ... other methods ...

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

// ... other methods ...
Salin selepas log masuk

(pointcounter.cs)

void Update () {
    text.text = rightBound.GetComponent<BoundController>().enemyScore + "\t\t" +
                leftBound.GetComponent<BoundController>().playerScore;
}
Salin selepas log masuk

(gameover.cs)

void Update () {
    if(uiManager.playerWon){
        text.text = "GAME OVER!\nPLAYER WON!";
    } else if(uiManager.enemyWon){
        text.text = "GAME OVER!\nENEMY WON!";
    }
}
Salin selepas log masuk

ingat untuk menyesuaikan nilai-nilai seperti kelajuan dan masa dalam skrip AI untuk menyempurnakan kesukaran permainan. Klon pong yang dipertingkatkan ini memberikan pengalaman permainan retro yang lebih lengkap dan menarik. Pautan GitHub (tidak disediakan dalam input) akan mengandungi fail projek penuh.

Atas ialah kandungan terperinci Membina klon pong dalam perpaduan: UI dan permainan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan