Menu
CoddyTech

Recapitulação: troca de entrada

Parte da seção Criando jogos de verdade do Journey de Unity da Coddy. Lição 47 de 56.

challenge icon

Desafio

Médio

Esta varinha de bolhas foi escrita para a classe antiga Input. Ela funciona em um projeto configurado como Both, mas este projeto está configurado como um novo projeto do Unity 6 (Active Input Handling: Input System Package): pressione Play e a primeira chamada a Input gera uma InvalidOperationException. Faça a migração para o Input System, mantendo tudo o que ela faz:

  • As setas ou WASD movem a varinha pelo gramado a speed unidades por segundo, sem acelerar na diagonal.
  • Pressionar Jump cria uma bolha 1.5 unidades acima da varinha. Enquanto Jump estiver pressionado, a bolha cresce growRate por segundo, até maxSize. Ao soltar, registra o tamanho, como em Bubble: 0.8.
  • Um clique com o botão esquerdo estoura todas as bolhas e registra quantas, como em Popped 3.

Use as ações Move e Jump do projeto e Mouse.current, e não deixe nenhuma chamada a Input. no script. Pressione Play e experimente; depois, pressione Check.

Experimente você mesmo

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

Todas as lições de Criando jogos de verdade