Fang ein Power-up
Lektion 15 von 19 im Kurs Unity-Spiel: Brick Breaker von Coddy.
Ein Power-up erkennt das Auffangen selbst: Sein Trigger-Collider berührt den Collider des Schlägers, und beide Körper sind kinematisch. Das reicht für OnTriggerEnter. Es fällt auch am Ball vorbei, deshalb prüft es zuerst den Tag.
Ein Enum benennt die Arten, und jedes Prefab legt seine eigene Art im Inspector fest, sodass ein Skript für beide genügt:
public enum Kind { Wide, Multiball }
public Kind kind;
if (kind == Kind.Multiball) Debug.Log("Three balls");other.GetComponent<Paddle>() findet das Paddle-Skript auf dem Objekt, das das Power-up berührt hat. „Wide“ gibt vorerst nur eine Meldung aus; in der nächsten Lektion wird der Schläger vergrößert.
Aufgabe
SchwerFange mit dem Schläger ein fallendes Power-up.
- Füge in
PowerUppublic enum Kind { Wide, Multiball }undpublic Kind kind;hinzu (jedes Prefab legt seinen Typ fest). - Füge
OnTriggerEnter(Collider other)hinzu: Kehre zurück, sofernother.CompareTag("Paddle")nicht zutrifft; ein breites Power-up ruftother.GetComponent<Paddle>().Widen();auf, danachDestroy(gameObject); - Füge in
Paddlepublic void Widen()hinzu, das vorerstWide paddleprotokolliert.
Drücke auf „Spielen“ und fange ein grünes Power-up: Es verschwindet und die Konsole zeigt Wide paddle an. Drücke anschließend auf „Prüfen“.
Probier es selbst
using UnityEngine;
using UnityEngine.InputSystem;
public class Paddle : MonoBehaviour
{
public float speed = 14f;
public float wallX = 8f; // die Innenseiten der Seitenwände liegen bei -wallX und wallX
Rigidbody rb;
void Awake()
{
rb = GetComponent<Rigidbody>();
}
void FixedUpdate()
{
float input = 0f;
if (Keyboard.current.leftArrowKey.isPressed || Keyboard.current.aKey.isPressed) input -= 1f;
if (Keyboard.current.rightArrowKey.isPressed || Keyboard.current.dKey.isPressed) input += 1f;
Vector3 target = rb.position + Vector3.right * input * speed * Time.fixedDeltaTime;
float halfWidth = transform.localScale.x / 2f;
target.x = Mathf.Clamp(target.x, -wallX + halfWidth, wallX - halfWidth);
rb.MovePosition(target);
}
}
Alle Lektionen in Unity-Spiel: Brick Breaker
Übe selbstständig: Unity-Playground