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:
BallController
skrip OnCollisionEnter2D
untuk menggunakan fungsi launchAngle
. Ingatlah untuk menandakan pemain dan musuh dengan tepat. 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. UIManager
menguruskan berhenti dan menyambung semula, bersama -sama dengan menunjukkan/bersembunyi elemen menu jeda. Pastikan untuk menandakan elemen menu jeda dengan "ShowonPause". AutoPlayer
dan AutoEnemy
(serupa dengan musuh AI tetapi dengan penyesuaian untuk kelajuan dan masa) untuk mengawal paddles AI di menu utama. 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".
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; }
(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 ... }
(uimanager.cs - separa)
// ... other methods ... public void showFinished() { foreach (GameObject g in finishObjects) { g.SetActive(true); } } // ... other methods ...
(pointcounter.cs)
void Update () { text.text = rightBound.GetComponent<BoundController>().enemyScore + "\t\t" + leftBound.GetComponent<BoundController>().playerScore; }
(gameover.cs)
void Update () { if(uiManager.playerWon){ text.text = "GAME OVER!\nPLAYER WON!"; } else if(uiManager.enemyWon){ text.text = "GAME OVER!\nENEMY WON!"; } }
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!