Menu
CoddyTech

Kleine Komponenten

Teil des Abschnitts Spielarchitektur in Unity der Unity-Journey von Coddy. Lektion 1 von 50.

Ein GameObject ist eine Liste von Komponenten, und jedes Skript, das du schreibst, ist eine weitere davon. Unity-Spiele entstehen, indem jedes Skript eine Aufgabe erhält und mehrere Skripte auf einem Objekt zusammengefügt werden. Die Bewegung, das Schießen und die Trefferpunkte eines Spielers könnten alle in einem PlayerController enthalten sein, aber als drei Komponenten, Mover, Shooter und Health, kann jede davon auch auf anderen Objekten verwendet werden:

public class Health : MonoBehaviour
{
    public int hp = 3;

    public void TakeDamage(int amount)
    {
        hp -= amount;
        if (hp <= 0)
        {
            Destroy(gameObject);
        }
    }
}
  • Spieler: Mover, Shooter, Health
  • Geschützturm: Shooter, Health
  • Kiste: Health

Mit einfachen C#-Klassen könntest du stattdessen einen Baum aufbauen: Character, dann ShootingCharacter : Character, dann Player : ShootingCharacter. Ein Geschützturm schießt, läuft aber nie, und eine Kiste geht nur kaputt. Daher bedeutet jede neue Objektart, den Baum umzugestalten. Bei Komponenten ist eine neue Objektart eine neue Kombination bereits vorhandener Skripte, die im Inspector zusammengestellt werden. Jedes Skript kann dort außerdem eigene Werte haben: ein langsamer Mover auf einem Objekt, ein schneller auf einem anderen.

Komponenten auf einem Objekt verwenden dessen Transform gemeinsam, daher sollte jede nur den Teil ändern, für den sie zuständig ist. Ein Mover, der mit transform.position += zu x und z addiert, lässt y unverändert, sodass ein Jumper auf demselben Objekt weiterhin die Höhe ändern kann. Ein Mover, der die gesamte Position auf new Vector3(x, 0.5f, z) setzen würde, setzte y in jedem Frame zurück und würde den Sprung aufheben.

challenge icon

Aufgabe

Einfach

Boat.cs erledigt drei Aufgaben auf einmal: Die Pfeile (die Aktion Move) steuern das Boot, das Boot schaukelt auf den Wellen, und seine Lampe blinkt. Auch die Ente muss schaukeln, und die Boje muss schaukeln und blinken. Deshalb hat die Szene ihnen bereits die Komponenten Bobber und Blinker zugewiesen, und das Boot hat alle drei. Teile Boat.cs in diese Komponenten auf:

  • Bobber: Jedes Objekt schaukelt um die Höhe, auf der es startet, um height Einheiten nach oben und unten, mit seiner eigenen speed (beides wird im Inspector festgelegt). Bobber ändert nur den y-Wert der Position, damit das Boot weiterhin gesteuert werden kann.
  • Blinker: Schaltet lamp (einen Renderer) alle interval Sekunden ein und aus.
  • Boat behält nur die Steuerung: Lösche das Schaukeln und Blinken samt den zugehörigen Feldern.

Drücke Play, steuere das Boot herum und klicke dann auf Check.

Probier es selbst

using UnityEngine;
using UnityEngine.InputSystem;

// Ein Skript, drei Aufgaben: Steuern, Schaukeln und Blinken.
public class Boat : MonoBehaviour
{
    public float speed = 3f;
    public float bobHeight = 0.1f;
    public float bobSpeed = 2f;
    public Renderer lamp;
    public float blinkInterval = 0.5f;

    private InputAction moveAction;
    private float startY;
    private float blinkTimer;

    void Start()
    {
        moveAction = InputSystem.actions.FindAction("Move");
        startY = transform.position.y;
    }

    void Update()
    {
        // Steuern
        Vector2 input = moveAction.ReadValue<Vector2>();
        transform.position += new Vector3(input.x, 0f, input.y) * speed * Time.deltaTime;

        // Schaukeln
        Vector3 p = transform.position;
        p.y = startY + Mathf.Sin(Time.time * bobSpeed) * bobHeight;
        transform.position = p;

        // Blinken
        blinkTimer += Time.deltaTime;
        if (blinkTimer >= blinkInterval)
        {
            blinkTimer -= blinkInterval;
            lamp.enabled = !lamp.enabled;
        }
    }
}
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 Spielarchitektur in Unity