Menu
CoddyTech

Riepilogo: cambio di input

Fa parte della sezione Creare veri giochi del percorso Unity di Coddy. Lezione 47 di 56.

challenge icon

Sfida

Medio

Questa bacchetta per bolle è stata scritta per la vecchia classe Input. Funziona in un progetto impostato su Both, ma questo progetto è configurato come un nuovo progetto Unity 6 (Active Input Handling: Input System Package): premi Play e la prima chiamata a Input genera un'InvalidOperationException. Portala all'Input System, mantenendo tutto ciò che fa:

  • Le frecce o WASD fanno camminare la bacchetta sul prato a speed unità al secondo, senza andare più veloce in diagonale.
  • Premendo Jump si soffia una bolla a 1.5 unità sopra la bacchetta. Mentre Jump è tenuto premuto, la bolla cresce di growRate al secondo, fino a maxSize. Rilasciando il tasto, viene registrata la sua dimensione, ad esempio Bubble: 0.8.
  • Un clic sinistro fa scoppiare tutte le bolle e registra quante sono, ad esempio Popped 3.

Usa le azioni Move e Jump del progetto e Mouse.current, e non lasciare alcuna chiamata Input. nello script. Premi Play e provalo, poi premi Check.

Provalo tu

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);
        }
    }
}

Tutte le lezioni di Creare veri giochi