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:
BallController
-Skript -Methode, um die Funktion OnCollisionEnter2D
zu verwenden. Denken Sie daran, den Spieler und die feindlichen Paddel angemessen zu markieren. launchAngle
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
UIManager
AutoPlayer
(ähnlich der feindlichen KI, jedoch mit Anpassungen für Geschwindigkeit und Timing), um die AI -Paddel im Hauptmenü zu steuern. AutoEnemy
PointCounter
GameOver
(BallController.cs - OnCollisionEnter2d & Launchangle) (fegeemyController.cs - Bewegung) (uimanager.cs - partiell) (pointcounter.cs) (GameOver.cs) 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. 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;
}
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 ...
}
// ... other methods ...
public void showFinished() {
foreach (GameObject g in finishObjects) {
g.SetActive(true);
}
}
// ... other methods ...
void Update () {
text.text = rightBound.GetComponent<BoundController>().enemyScore + "\t\t" +
leftBound.GetComponent<BoundController>().playerScore;
}
void Update () {
if(uiManager.playerWon){
text.text = "GAME OVER!\nPLAYER WON!";
} else if(uiManager.enemyWon){
text.text = "GAME OVER!\nENEMY WON!";
}
}
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!