Menu
CoddyTech

Rückblick: Eingabewechsel

Teil des Abschnitts Echte Spiele entwickeln der Unity-Journey von Coddy. Lektion 47 von 56.

challenge icon

Aufgabe

Mittel

Dieser Blasenstab wurde für die alte Klasse Input geschrieben. In einem auf Both eingestellten Projekt funktioniert er, aber dieses Projekt ist wie ein neues Unity-6-Projekt eingerichtet (Active Input Handling: Input System Package): Drücke Play, und der erste Aufruf von Input löst eine InvalidOperationException aus. Portiere ihn zum Input System und behalte dabei alle Funktionen bei:

  • Mit den Pfeiltasten oder WASD bewegst du den Stab mit speed Einheiten pro Sekunde über den Rasen, diagonal nicht schneller.
  • Wenn du Jump drückst, entsteht eine Blase 1.5 Einheiten über dem Stab. Solange du Jump gedrückt hältst, wächst diese Blase mit growRate pro Sekunde bis auf maxSize. Beim Loslassen wird ihre Größe protokolliert, zum Beispiel Bubble: 0.8.
  • Ein Linksklick lässt alle Blasen platzen und protokolliert deren Anzahl, zum Beispiel Popped 3.

Verwende die Aktionen Move und Jump des Projekts sowie Mouse.current, und lasse keinen Aufruf von Input. im Skript stehen. Drücke Play und probiere es aus, dann Check.

Probier es selbst

using UnityEngine;

public class Wand : MonoBehaviour
{
    public float speed = 4f;
    public float growRate = 1f;
    public float maxSize = 1.5f;
    public GameObject bubblePrefab;

    private Transform bubble;

    void Update()
    {
        Vector3 move = new Vector3(Input.GetAxisRaw("Horizontal"), 0f, Input.GetAxisRaw("Vertical"));
        transform.position += move.normalized * speed * Time.deltaTime;

        if (Input.GetButtonDown("Jump"))
        {
            bubble = Instantiate(bubblePrefab, transform.position + Vector3.up * 1.5f, Quaternion.identity).transform;
        }
        if (Input.GetButton("Jump") && bubble != null)
        {
            float size = Mathf.Min(bubble.localScale.x + growRate * Time.deltaTime, maxSize);
            bubble.localScale = Vector3.one * size;
        }
        if (Input.GetButtonUp("Jump") && bubble != null)
        {
            Debug.Log("Bubble: " + bubble.localScale.x.ToString("F1"));
            bubble = null;
        }

        if (Input.GetMouseButtonDown(0))
        {
            GameObject[] bubbles = GameObject.FindGameObjectsWithTag("Bubble");
            foreach (GameObject b in bubbles) Destroy(b);
            Debug.Log("Popped " + bubbles.Length);
        }
    }
}

Alle Lektionen in Echte Spiele entwickeln