Menu
CoddyTech

Kanonenreichweite

Teil des Abschnitts Physik und Gameplay der Unity-Journey von Coddy. Lektion 61 von 63.

An einem Ende eines Schießstands steht eine Kanone, und drei Ziele gleiten in unterschiedlichen Entfernungen seitlich über den Schießstand. Du neigst den Lauf nach oben und unten, um jede Entfernung zu erreichen, und gibst jeden Schuss dann ab, wenn ein Ziel die Schusslinie kreuzt. Ein Ball, der ein Ziel trifft, schaltet es aus und wird verbraucht; alles andere, was ein Ziel berührt, lässt es unversehrt. Die Ziele sind kinematische Körper, daher werden sie durch Treffer niemals weggestoßen, und die Kanone hat fünf Bälle.

Schreibe zwei Skripte: Cannon am Lauf und Target an jedem Ziel.

challenge icon

Aufgabe

Schwer

Der Inspector weist Cannon ballPrefab zu (ein Rigidbody: das Ball-Prefab, Masse 2, mit dem Tag Ball), angle (30), turnSpeed (40), power (30) und balls (5).

  • Der Nach-oben-Pfeil erhöht angle, der Nach-unten-Pfeil verringert ihn, mit turnSpeed Grad pro Sekunde, niemals unter 10 oder über 60. Setze in jedem Frame die Rotation des Kanonenrohrs auf Quaternion.Euler(-angle, 0, 0): In Unity kippt ein positiver x-Winkel die Vorderseite nach unten, das Minuszeichen richtet sie also nach oben.
  • Mit der Leertaste wird ein Ball abgefeuert, solange balls größer als 0 ist: Erzeuge ihn 1 Einheit vor der Mitte des Kanonenrohrs, entlang des Rohrs, stoße ihn mit einem Impuls von power entlang des Rohrs an, ziehe 1 von balls ab und gib die verbleibende Anzahl aus, etwa Balls left: 4. Sind keine Bälle mehr übrig, bewirkt die Leertaste nichts.

Jedes Ziel hat ein kinematisches Rigidbody, und der Inspector weist Target speed und range zu (2 und 3 für Target1).

  • Bewege das Ziel bei jedem Physikschritt entlang der x-Achse mit MovePosition und einer Geschwindigkeit von speed Einheiten pro Sekunde. Wende es immer dann, wenn es sich range Einheiten von seinem Startpunkt entfernt hat.
  • Wenn ein Ball (mit dem Tag Ball) das Ziel trifft, gib den Namen des Ziels und hit! aus, etwa Target2 hit!, und zerstöre sowohl das Ziel als auch den Ball. Alles, was kein Ball ist, lässt es unberührt.

Drücke Play und schalte alle drei Ziele aus, dann Check.

Probier es selbst

using UnityEngine;

public class Cannon : MonoBehaviour
{
    [SerializeField] private Rigidbody ballPrefab;
    [SerializeField] private float angle = 30f;
    [SerializeField] private float turnSpeed = 40f;
    [SerializeField] private float power = 30f;
    [SerializeField] private int balls = 5;

    void Update()
    {
        // Mit den Pfeiltasten nach oben und unten zielen, mit Space schießen
    }
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Physik und Gameplay