


Construire un clone pong dans Unity: UI et gameplay
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:
- Styling classique: Importer des sprites en noir et blanc, en ajustant les pixels par unité (à 64) pour des visuels rétro authentiques. Changez l'arrière-plan principal de la caméra en noir et mettez à jour les sprites à palette et à balle en conséquence. Créez un diviseur central en utilisant plusieurs sprites blancs à l'échelle.
- Collisions améliorées: Affinez la manipulation des collisions à billes pour calculer les angles d'impact sur les pagaies, ce qui rend les rebonds plus réalistes. Cela implique la mise à jour de la méthode
BallController
du scriptOnCollisionEnter2D
pour utiliser la fonctionlaunchAngle
. N'oubliez pas de marquer de manière appropriée le joueur et les pagaies ennemies. - Amélioration de l'IA ennemie: Mouvement de palette ennemi lisse en utilisant des calculs en fonction du temps, améliorant la réactivité et le défi. Modifiez le script
EnemyController
pour utiliserInvokeRepeating("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 scriptBoundsController
doit réinitialiser la position de la pagaie ennemie après la détruire du ballon. - Menu de pause rétro: Créez un menu de pause à l'aide d'une police de pixel personnalisée (comme Silkscreen). Incluez les boutons "réinitialiser" et "menu principal" avec des fonctionnalités appropriées. Le script
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". - Menu principal dynamique: Concevoir un menu principal avec un gameplay AI simulé en arrière-plan. Dupliquez la scène principale du jeu, supprimez les éléments inutiles et ajoutez un titre et un bouton "Play". Utilisez les scripts
AutoPlayer
etAutoEnemy
(similaires à l'IA ennemi mais avec des ajustements pour la vitesse et le timing) pour contrôler les pagaies AI dans le menu principal. - Système de notation: Implémentez un système de notation qui suit les scores du lecteur et de l'IA, les affiche sur l'interface utilisateur (en utilisant le script
PointCounter
) et met fin au jeu lorsqu'une limite de score (par exemple, 7 points ) est atteint, affichant un jeu sur l'écran. Le scriptGameOver
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!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds











Ce programme pilote, une collaboration entre le CNCF (Cloud Native Computing Foundation), Ampere Computing, Equinix Metal et ACTUTIE, rationalise ARM64 CI / CD pour les projets GitHub CNCF. L'initiative répond aux problèmes de sécurité et aux performances LIM

Ce tutoriel vous guide dans la création d'un pipeline de traitement d'image sans serveur à l'aide de services AWS. Nous allons créer un frontend Next.js déployé sur un cluster ECS Fargate, en interagissant avec une passerelle API, des fonctions lambda, des seaux S3 et DynamoDB. Ème

Restez informé des dernières tendances technologiques avec ces meilleurs bulletins de développeur! Cette liste organisée offre quelque chose pour tout le monde, des amateurs d'IA aux développeurs assaisonnés du backend et du frontend. Choisissez vos favoris et gagnez du temps à la recherche de rel
