Der rollende Ball
Teil des Abschnitts Physik und Gameplay der Unity-Journey von Coddy. Lektion 28 von 71.
In diesem Kapitel entwickelst du ein kleines Spiel, Coin Rush. Du rollst einen Ball mit den Pfeiltasten durch eine von Mauern umgebene Arena und sammelst Münzen, bevor die Zeit abläuft. Zwei Skripte teilen sich die Aufgaben, wie es auch in einem Unity-Projekt der Fall wäre: Ball bewegt den Ball und verwaltet Punktestand und Uhr, und Coin befindet sich auf jeder Münze. Coin.cs beginnt als leere Klasse, und in der nächsten Lektion wird sie vervollständigt.
Ein Ball rollt, wenn du ihn anschiebst, statt ihn zu platzieren. Schiebe sein Rigidbody mit AddForce an und lass seine Drehung frei: Die Kraft bewegt den Ball, und die Reibung des Bodens greift an der Unterseite des Balls und versetzt ihn in Drehung. Diese Bowlingkugel rollt die Bahn hinunter, solange die Leertaste gedrückt gehalten wird:
public float push = 6f;
private Rigidbody rb;
void Start()
{
rb = GetComponent<Rigidbody>();
}
void FixedUpdate()
{
if (Input.GetKey(KeyCode.Space))
{
rb.AddForce(Vector3.forward * push);
}
}Ein Ball, der ohne zu rutschen rollt, dreht sich mit seiner Geschwindigkeit geteilt durch seinen Radius. Ein Ball mit einem Radius von 0.5, der sich mit 3 Einheiten pro Sekunde bewegt, dreht sich also mit 6 Radiant pro Sekunde (rb.angularVelocity). Ändere stattdessen seine transform.position oder friere seine Drehung unter „Constraints“ im Rigidbody ein, und er gleitet wie ein Puck, ohne sich zu drehen. Eine schlichte einfarbige Kugel sieht in beiden Fällen gleich aus: Um das Rollen zu sehen, beobachte während des Spiels „Angular Velocity“ im Abschnitt „Info“ des Rigidbody.
Aufgabe
MittelStarte Coin Rush: Bewege den Ball mit den Pfeiltasten.
- Setze in
Ball.csinStart()rb = GetComponent<Rigidbody>();. - Lies in
FixedUpdate()float x = Input.GetAxis("Horizontal");undfloat z = Input.GetAxis("Vertical");aus und rufe dannrb.AddForce(new Vector3(x, 0f, z) * force);auf.
Drücke „Spielen“, klicke ins Spiel und bewege den Ball: Der Ball dreht sich, während er sich bewegt. Drücke dann „Prüfen“.
Probier es selbst
using UnityEngine;
public class Ball : MonoBehaviour
{
public float force = 10f;
private Rigidbody rb;
void Start()
{
}
void FixedUpdate()
{
// Bewege den Ball mit den Pfeiltasten: Horizontal entlang der x-Achse, Vertical entlang der z-Achse.
}
}
Alle Lektionen in Physik und Gameplay
1Rigidbody
Schwerkraft und MasseMit AddForce schiebenMit einem Impuls springenFixedUpdate für PhysikGeschwindigkeitKinematische KörperRückblick: Startrampe4Coroutinen
AufrufenWiederholt aufrufen, Aufruf abbrechenDeine erste CoroutineSchleifen in CoroutinenCoroutinen beendenRückblick: Countdown10Projekt: Arena-Flucht
Die ArenaJäger2Kollisionen
OnCollisionEnterWas habe ich getroffen?Beim Aufprall zerbrechenAuf dem Boden stehenAbprallen und ReibungCollider-FormenRückblick: Zerstörbare Wand5Projekt: Münzrausch
Der rollende BallMünzen zum Einsammeln11Abschließende Herausforderungen
KanonenreichweiteBewegliche ZieleMurmelgolfIns LochEscape RoomDie TürÜbe selbstständig: Unity-Playground