Menu
CoddyTech

Girdi Eylemleri

Coddy'nin Unity Journey'sinin Gerçek Oyunlar Geliştirmek bölümünün bir parçası. Ders 46 / 56.

Κάθε φορά που ελέγχεις ένα πλήκτρο ξεχωριστά, δένεις ένα script με το πληκτρολόγιο. Μια ενέργεια περιγράφει τι κάνει ο παίκτης, ενώ το project ορίζει ποια πλήκτρα, μοχλοί και κουμπιά την ενεργοποιούν. Ένα νέο project του Unity 6 περιλαμβάνει ένα σύνολο ενεργειών (το asset InputSystem_Actions, ορισμένο ως οι ενέργειες για ολόκληρο το project). Στον χάρτη Player του υπάρχουν οι Move (WASD, τα βέλη και ο αριστερός μοχλός ενός gamepad), Look (το ποντίκι ή ο δεξιός μοχλός), Attack (το αριστερό κουμπί του ποντικιού και το Enter), Interact (E, όσο το κρατάς πατημένο), Crouch (C), Jump (Space και το κάτω κουμπί του gamepad), Previous και Next (1 και 2), καθώς και Sprint (Left Shift). Είναι ενεργοποιημένες από την αρχή, και η InputSystem.actions.FindAction("Jump") βρίσκει μία με βάση το όνομά της. Αυτός ο γερανός με αρπάγη, σε πλάγια όψη, κινείται στους άξονες x και y και αρπάζει με το Jump:

using UnityEngine;
using UnityEngine.InputSystem;

public class ClawCrane : MonoBehaviour
{
    public float speed = 3f;

    private InputAction moveAction;
    private InputAction jumpAction;

    void Start()
    {
        moveAction = InputSystem.actions.FindAction("Move");
        jumpAction = InputSystem.actions.FindAction("Jump");
    }

    void Update()
    {
        Vector2 input = moveAction.ReadValue<Vector2>();
        transform.position += new Vector3(input.x, input.y, 0f) * speed * Time.deltaTime;

        if (jumpAction.WasPressedThisFrame())
            Debug.Log("Grab!");
    }
}

Οι ενέργειες εντοπίζονται μία φορά, στη Start, και αποθηκεύονται σε πεδία InputAction. Η Move επιστρέφει ένα Vector2: το x είναι δεξιά και αριστερά, το y είναι πάνω και κάτω στα πλήκτρα, και η τιμή είναι κανονικοποιημένη. Έτσι, το W και το D μαζί δίνουν (0.71, 0.71) αντί για (1, 1). Ο γερανός φαίνεται από το πλάι, οπότε χρησιμοποιεί το y για το ύψος· ένα παιχνίδι σε κάτοψη θα το χρησιμοποιούσε για το z. Οι ενέργειες κουμπιών λειτουργούν όπως τα πλήκτρα: WasPressedThisFrame(), WasReleasedThisFrame() και IsPressed(). Δύο λάθη προκαλούν εξαίρεση: αν γράψεις λάθος το όνομα, η FindAction επιστρέφει null (και προκύπτει NullReferenceException κατά την πρώτη ανάγνωση), ενώ η κλήση της ReadValue<Vector3>() στη Move προκαλεί InvalidOperationException μόλις πατηθεί κάποιο πλήκτρο, επειδή η Move επιστρέφει Vector2.

challenge icon

Görev

Orta

Araştırmacı, yukarıdan görünen bir kar alanının haritasını çıkarır ve yol boyunca dikmek için flags (3) taşır. Betikte speed (4), flags, flagPrefab ve planted listesi bulunur. Projenin eylemlerini kullan:

  • Move, araştırmacıyı saniyede speed birim hızla karda hareket ettirir: x ekseninde sağa ve sola, z ekseninde yukarı ve aşağı.
  • Jump tuşuna her basışta bir bayrak dikilir: flagPrefab kopyası, araştırmacının x ve z koordinatlarında, y 0.75 konumunda oluşturulur ve planted listesine eklenir. flags değerinden bir eksilir ve geriye kalan sayı Flags left: 2 gibi bir mesajla günlüğe kaydedilir. Bayrak kalmadığında Jump hiçbir şey dikmez.
  • Attack tuşuna her basışta (sol tıklama) en son dikilen bayrak sökülür: bayrak yok edilir ve listeden çıkarılır, flags bir artar ve aynı satır günlüğe kaydedilir.

Play'e bas, üç bayrak dik ve birini sök, ardından Check'e bas.

Kendin dene

using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem;

public class Surveyor : MonoBehaviour
{
    public float speed = 4f;
    public int flags = 3;
    public GameObject flagPrefab;

    private List<GameObject> planted = new List<GameObject>();

    void Start()
    {
        // Move, Jump ve Attack eylemlerini bul
    }

    void Update()
    {
        // Move ile yürü, Jump ile bir bayrak dik, Attack ile bir bayrağı sök
    }
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Gerçek Oyunlar Geliştirmek bölümündeki tüm dersler