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 / 60.

GameObject > UI > Button - TextMeshPro bir düğme ekler: tıklanacak bir Image, bir Button bileşeni ve etiketi için bir Text (TMP) alt nesnesi. Button'ın onClick özelliği bir olaydır; üzerine tıklama 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 olmadan yöntemin kendisini iletir. AddListener(Ring()) ise Ring'i hemen çağırır ve döndürdüğü değeri iletir; döndürülen bir şey olmadığından 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 çalmasına neden olur. Tıklama yalnızca düğmenin üzerinde gerçekleştiğinde sayılır; oysa Input.GetMouseButtonDown(0), herhangi bir yere tıklandığında true olur.

Bir düğmenin interactable özelliği, kullanılıp kullanılamayacağını belirler. bellButton.interactable = false; düğmeyi Disabled Color rengine boyar ve true olarak ayarlanana kadar dinleyicileri çağrılmaz; böylece oyuncu hangi düğmelerin şu anda çalıştığını görür. Telefonda aynı düğmelere dokunulur.

challenge icon

Görev

Kolay

Asansörün Yukarı ve Aşağı düğmelerini çalışır hâle getir.

  1. Start() içinde, onClick.AddListener ile upButton'ı GoUp'a (floor++) ve downButton'ı GoDown'a (floor--) bağla.
  2. Start() içinde ve her hareketten sonra çağrılan ShowFloor() metodunu yaz: asansörün y değeri floor * floorHeight olsun ve floorText içinde Floor: 2 yazsın.
  3. Yukarı düğmesi topFloor değerinin altındayken, Aşağı düğmesi 0'ın üzerindeyken etkileşimli olsun.

“Oyna” düğmesine bas: en üst katta Yukarı düğmesi griye döner. Ardından “Kontrol et” düğmesine 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ğla
    }
}

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

Kendi başına pratik yap: Unity playground