Rückblick: Eingabewechsel
Teil des Abschnitts Echte Spiele entwickeln der Unity-Journey von Coddy. Lektion 47 von 56.
Aufgabe
MittelDieser 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
speedEinheiten 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
growRatepro Sekunde bis aufmaxSize. Beim Loslassen wird ihre Größe protokolliert, zum BeispielBubble: 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
1Text auf dem Bildschirm
Canvas und TextPunktestand anzeigenZahlen formatierenEin Countdown-TimerRückblick: Tachometer4Szenen und Level
Eine Szene ladenDas Level neu startenNächstes LevelZwischen Szenen beibehaltenRückblick: Levelauswahl10Projekt: 3D-Plattformer
Der ParcoursBewegliche Plattformen2Buttons und Bildschirme
Buttons und onClickLambdasVerknüpfungen im InspectorPanels ein- und ausblendenGesundheitsbalkenRückblick: Upgrade-Shop5Speichern mit PlayerPrefs
Eine Zahl speichernMit einem Standardwert ladenHöchstpunktzahlEinstellungen speichernRückblick: Münzen auf der Bank3Der Spielmanager
Ein Skript steuert das SpielDas SingletonSpielzuständeZum Zustand wechselnRückblick: Rundenmanager6Projekt: Endlos-Runner
Drei SpurenHindernisse voraus9Das neue Eingabesystem
Zwei EingabesystemeTastatur und MausIn diesem Frame gedrücktEingabeaktionenRückblick: Eingabewechsel