Menu
CoddyTech

Düğmeler ve onClick

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

GameObject > UI > Button - TextMeshPro bir düğme ekler: tıklanacak bir Image, bir Button bileşeni ve etiketi için bir Text (TMP) alt öğesi. Button'ın onClick özelliği bir olaydır; tıklama düğmenin üzerindeyken bırakıldığında çağırdığı yöntemlerin listesidir. Bir betik, Start() içinde bir kez AddListener ile kendi yöntemini bu listeye ekler. Button, UnityEngine.UI ad alanında bulunur:

using UnityEngine;
using UnityEngine.UI;

public class Doorbell : MonoBehaviour
{
    public Button bellButton;
    private int rings;

    void Start()
    {
        bellButton.onClick.AddListener(Ring);
    }

    void Ring()
    {
        rings++;
        Debug.Log("Ding! " + rings);
    }
}

AddListener(Ring), parantez kullanmadan yöntemin kendisini iletir. AddListener(Ring()) ise Ring'i hemen çağırır ve döndürdüğü değeri iletir; bu değer hiçbir şey olmadığı için kod derlenmez: Argument 1: cannot convert from 'void' to 'UnityEngine.Events.UnityAction'. Bir dinleyici parametre almaz ve void döndürür. Update() içinde eklenirse aynı yöntem her karede listeye yeniden eklenir ve tek bir tıklama yüzlerce kez zil çaldırır. Tıklama yalnızca düğmenin kendisi üzerinde olduğunda sayılırken, Input.GetMouseButtonDown(0) herhangi bir yere tıklanınca true olur.

Bir düğmenin interactable özelliği kullanılıp kullanılamayacağını belirler. bellButton.interactable = false; düğmeyi Disabled Color ile renklendirir ve tekrar true yapılana kadar dinleyicileri çağrılmaz; böylece oyuncu o anda hangi düğmelerin çalıştığını görür. Telefonda aynı düğmelere dokunulur.

challenge icon

Görev

Kolay

Kulenin asansöründe Yukarı ve Aşağı düğmeleri var. Lift.cs dosyasını yaz (sahne, upButton, downButton ve floorText öğelerine bağlanır):

  • Start() içinde, upButton öğesini asansörü bir kat yukarı çıkaran bir yönteme, downButton öğesini ise asansörü bir kat aşağı indiren bir yönteme bağla.
  • Katlar 0 ile topFloor (3) arasında değişir. Asansörün y konumu = kat x floorHeight (3); yani 2. katta y konumu 6 olur. x ve z değerleri olduğu gibi kalır.
  • floorText, başlangıçtan itibaren katı Floor: 2 biçiminde gösterir.
  • En üst katta Yukarı düğmesi, 0. katta ise Aşağı düğmesi etkileşimli olmaz.

Play'e bas, en üst kata çıkıp geri dön, ardından Check'e bas.

Kendin dene

using UnityEngine;
using UnityEngine.UI;
using TMPro;

public class Lift : MonoBehaviour
{
    public Button upButton;
    public Button downButton;
    public TMP_Text floorText;
    public int topFloor = 3;
    public float floorHeight = 3f;
    private int floor;

    void Start()
    {
        // upButton ve downButton öğelerini asansörü bir kat hareket ettiren metotlara bağlayın
    }
}
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