Menu
CoddyTech

Rangkuman: Pergantian Input

Termasuk bagian Membangun Game Sungguhan dalam perjalanan Unity di Coddy. Pelajaran 47 dari 56.

challenge icon

Tantangan

Sedang

Wand gelembung ini ditulis untuk class Input lama. Wand ini berfungsi di proyek yang disetel ke Both, tetapi proyek ini disiapkan seperti proyek Unity 6 baru (Active Input Handling: Input System Package): tekan Play dan pemanggilan Input pertama akan memunculkan InvalidOperationException. Porting ke Input System, dengan mempertahankan semua fungsinya:

  • Tombol panah atau WASD menggerakkan wand melintasi halaman rumput dengan kecepatan speed unit per detik, tanpa bergerak lebih cepat secara diagonal.
  • Tekan Jump untuk meniup gelembung 1.5 unit di atas wand. Selama Jump ditekan, gelembung itu membesar sebesar growRate per detik, hingga mencapai maxSize. Saat tombol dilepas, ukuran gelembung dicatat, misalnya Bubble: 0.8.
  • Klik kiri untuk memecahkan semua gelembung dan mencatat jumlahnya, misalnya Popped 3.

Gunakan action Move dan Jump dari proyek, serta Mouse.current, dan pastikan tidak ada pemanggilan Input. di dalam skrip. Tekan Play dan coba, lalu tekan Periksa.

Coba sendiri

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

Semua pelajaran di Membangun Game Sungguhan