Ce tutoriel améliore un clone de base de base construit dans l'unité, ajoutant une esthétique de pong classique, des mécanismes de jeu améliorés et une interface utilisateur de style rétro. Mettons à niveau notre jeu Pong!
PARTIE 2: Retro Revamp & Gameplay amélioré
Ce tutoriel s'appuie sur le précédent clone de Pong. Téléchargez le projet depuis GitHub ou terminez la partie 1 avant de continuer. Une démo de travail et le jeu final amélioré sont également disponibles.
Améliorations de clés:
BallController
du script OnCollisionEnter2D
pour utiliser la fonction launchAngle
. N'oubliez pas de marquer de manière appropriée le joueur et les pagaies ennemies. EnemyController
pour utiliser InvokeRepeating("Move", .02F, .02F)
, en ajustant la vitesse et le synchronisation pour une douceur optimale. Ajoutez des limites pour empêcher la palette de l'IA de sortir hors écran. Le script BoundsController
doit réinitialiser la position de la pagaie ennemie après la détruire du ballon. UIManager
gère une pause et une reprise, ainsi que des éléments de menu afficher / cacher la pause. Assurez-vous de marquer les éléments du menu de pause avec "showonpause". AutoPlayer
et AutoEnemy
(similaires à l'IA ennemi mais avec des ajustements pour la vitesse et le timing) pour contrôler les pagaies AI dans le menu principal. PointCounter
) et met fin au jeu lorsqu'une limite de score (par exemple, 7 points ) est atteint, affichant un jeu sur l'écran. Le script GameOver
affiche le gagnant. N'oubliez pas de marquer le jeu sur des éléments avec "showonfinish".
Extraits de code:
(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 - partiel)
// ... 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!"; } }
N'oubliez pas d'ajuster les valeurs comme la vitesse et le timing dans les scripts AI pour affiner la difficulté du gameplay. Ce clone Pong amélioré offre une expérience de jeu rétro plus complète et plus engageante. Le lien github (non fourni dans l'entrée) contiendrait les fichiers de projet complets.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!