UnityYazılım

Unity MonoBehaviour Sınıfı Metodları

MonoBehaviour sınıfı, C# programlama dilinde yazılır ve Unity motorunun scripting API’sı tarafından desteklenir. Bu sınıf, oyun nesnelerinin hayat döngüsü ile ilgili çeşitli metotlar içerir. Bu metotlar, oyun nesnelerinin başlatılması, güncellenmesi, yok edilmesi ve etkileşimlerinin kontrol edilmesi gibi işlevleri yönetmek için kullanılır.

MonoBehaviour sınıfı, Unity oyun motorunun en temel ve yaygın kullanılan sınıflarından biridir. Bu sınıf sayesinde, oyun nesnelerinin davranışlarını ve etkileşimlerini programlayabilir, oyun mekaniğini tasarlayabilir ve oyun nesnelerinin görünümünü ve işlevselliğini kontrol edebilirsiniz.

Örneğin, bir oyuncu nesnesi MonoBehaviour sınıfından türetilen bir bileşen içerebilir. Bu bileşen, oyuncunun hareketini kontrol etmek, diğer nesnelerle etkileşim kurmak, puanlama sistemi gibi oyun mekaniğine ilişkin görevleri yönetmek için kullanılabilir. Bu sayede, oyun geliştiricileri, Unity’nin sağladığı araçlar ve MonoBehaviour sınıfının işlevleri sayesinde oyunların karmaşık işlevlerini ve etkileşimlerini kolayca programlayabilirler.

Unity MonoBehaviour sınıfı içerisinde yer alan metotlar, belirli bir yaşam döngüsüne sahiptir ve bu yaşam döngüsü sırasında farklı zamanlarda çalıştırılırlar. Bu nedenle, bu metotların çalışma sırası belirli bir düzene tabidir ve önceden belirlenmiş kurallara uygun olarak gerçekleştirilir.

Bu yaşam döngüsü sırasında, MonoBehaviour sınıfı içinde yer alan metodlar şu sırayla çağrılır:

  1. Awake(): Nesne oluşturulduktan sonra hemen çağrılır. Sadece bir kez çağrılır ve diğer yaşam döngüsü metodlarından önce çalışır.
  2. OnEnable(): Nesne etkinleştirildiğinde çağrılır. İlk kez etkinleştirildiğinde veya bir nesne devre dışı bırakıldıktan sonra tekrar etkinleştirildiğinde çağrılır.
  3. Start(): Update döngüsüne girmeden önce bir kez çağrılır. Nesne oluşturulduktan sonra, Awake metodundan sonra ve OnEnable metodundan sonra çağrılır.
  4. FixedUpdate(): Fiziksel işlemler için kullanılır ve belli bir zaman aralığıyla çağrılır.
  5. Update(): Her karede bir kez çağrılır ve oyun nesneleri için güncelleme işlemleri yapılır.
  6. LateUpdate(): Update metodundan sonra çağrılır ve kamera işlemleri gibi diğer nesneleri güncellemek için kullanılır.
  7. OnDisable(): Nesne devre dışı bırakıldığında çağrılır.
  8. OnDestroy(): Nesne yok edildiğinde çağrılır.

Bu metotların çağrılma sırası, Unity’nin temel bir parçasıdır ve bu sıralama, Unity’nin özelliklerinin ve yapısının anlaşılması için önemlidir. Bu nedenle, bu metotların ne zaman ve hangi durumlarda çağrıldığını anlamak, oyun nesnelerinin davranışlarını doğru bir şekilde kontrol etmek için önemlidir.

Awake Metodu

MonoBehaviour sınıfı, Unity’nin oyun nesneleri üzerinde çalıştığı birçok farklı metot içerir ve bunlardan biri de Awake metodudur.

Awake metodu, MonoBehaviour sınıfındaki diğer metodlar gibi, oyun nesnesi bileşeninin hayat döngüsünün bir parçasıdır. Bu metot, oyun nesnesi bileşeni etkinleştirildiğinde, yani nesne sahne hiyerarşisinde oluşturulduğunda bir kez çağrılır.

Awake metodu genellikle nesne özellikleri ve bileşenlerinin hazırlanması için kullanılır. Örneğin, nesne üzerindeki diğer bileşenlere erişmek, bileşenlerin özelliklerini belirlemek veya oyun nesnesi ile ilgili önemli değişkenleri tanımlamak için Awake metodu kullanılabilir.

Aşağıdaki örnek, Awake metodunu kullanarak bir oyuncu nesnesi bileşenindeki diğer bileşenlere erişerek özelliklerini ayarlıyor:

using UnityEngine;

public class PlayerController : MonoBehaviour
{
    public float speed = 5.0f;
    public GameObject bulletPrefab;
    public Transform bulletSpawnPoint;

    private Rigidbody rb;

    void Awake()
    {
        // Rigidbody bileşenine eriş
        rb = GetComponent<Rigidbody>();
    }

    void Update()
    {
        // Oyuncunun hareketini kontrol et
        float horizontal = Input.GetAxis("Horizontal");
        float vertical = Input.GetAxis("Vertical");

        Vector3 movement = new Vector3(horizontal, 0.0f, vertical);
        rb.AddForce(movement * speed);

        // Mermi oluşturmak için Space tuşuna bas
        if (Input.GetKeyDown(KeyCode.Space))
        {
            Instantiate(bulletPrefab, bulletSpawnPoint.position, bulletSpawnPoint.rotation);
        }
    }
}

Bu örnekte, Awake metodu, Rigidbody bileşenine erişmek için kullanılır. Bu sayede, bileşenin özellikleri, Update metodu içindeki hareket kodunda kullanılabilecek olan bir değişkene atanır.

Awake metodu, diğer bileşenlere erişmek ve oyun nesnesi ile ilgili önemli değişkenleri tanımlamak için kullanılabilir. Böylece, oyun nesnesi bileşeni hazırlanarak, nesnenin diğer bileşenleriyle etkileşimi daha kolay hale gelir.

OnEnable Metodu

OnEnable metodu, MonoBehaviour sınıfındaki diğer metodlar gibi, oyun nesnesi bileşeninin hayat döngüsünün bir parçasıdır. Bu metot, oyun nesnesi bileşeni etkinleştirildiğinde, yani nesne sahne hiyerarşisine eklenerek etkinleştirildiğinde çağrılır.

OnEnable metodu genellikle nesne özellikleri ve bileşenlerinin hazırlanması için kullanılır. Örneğin, başka bir bileşenin etkinleştirilmesi gerektiğinde veya oyun nesnesi ile ilgili önemli değişkenleri tanımlamak için OnEnable metodu kullanılabilir.

Aşağıdaki örnek, OnEnable metodunu kullanarak bir oyuncu nesnesi bileşeninin diğer bileşenleri ile etkileşimini kontrol ediyor:

using UnityEngine;

public class PlayerController : MonoBehaviour
{
    public float speed = 5.0f;
    public GameObject bulletPrefab;
    public Transform bulletSpawnPoint;

    private Rigidbody rb;

    void Awake()
    {
        // Rigidbody bileşenine eriş
        rb = GetComponent<Rigidbody>();
    }

    void OnEnable()
    {
        // Mermi oluşturmak için diğer bileşenleri etkinleştir
        bulletPrefab.SetActive(true);
        bulletSpawnPoint.gameObject.SetActive(true);
    }

    void Update()
    {
        // Oyuncunun hareketini kontrol et
        float horizontal = Input.GetAxis("Horizontal");
        float vertical = Input.GetAxis("Vertical");

        Vector3 movement = new Vector3(horizontal, 0.0f, vertical);
        rb.AddForce(movement * speed);

        // Mermi oluşturmak için Space tuşuna bas
        if (Input.GetKeyDown(KeyCode.Space))
        {
            Instantiate(bulletPrefab, bulletSpawnPoint.position, bulletSpawnPoint.rotation);
        }
    }
}

Bu örnekte, OnEnable metodu, diğer bileşenlerin etkinleştirilmesi için kullanılır. Bu sayede, mermi oluşturmak için gereken bileşenler, oyuncu nesnesi bileşeni etkinleştirildiğinde etkinleştirilecektir. Bu da oyun sırasında gereksiz bellek kullanımının önlenmesine yardımcı olur.

OnEnable metodu, diğer bileşenleri etkinleştirmek ve oyun nesnesi ile ilgili önemli değişkenleri tanımlamak için kullanılabilir. Böylece, oyun nesnesi bileşeni hazırlanarak, nesnenin diğer bileşenleriyle etkileşimi daha kolay hale gelir.

Start Metodu

Unity MonoBehaviour sınıfının Start metodu, oyun nesneleri ilk başlatıldığında bir kez çağrılan bir metottur. Bu metot, oyun nesnesinin ilk ayarlarını yapmak, başlatma öncesi işlemler yapmak ve diğer bileşenlerle etkileşim kurmak için kullanılabilir.

Örneğin, bir oyuncu nesnesi, Start metodunu kullanarak oyuncunun başlangıç pozisyonunu, puanını sıfırlamak gibi ayarlamalar yapabilir. Ayrıca, diğer nesnelerle etkileşim kurması gerekiyorsa, Start metodunu kullanarak bu nesneleri tanımlayabilir.

Aşağıdaki örnek, Start() metodunu kullanarak bir oyuncu nesnesinin ayarlarını ve diğer nesnelerle etkileşimlerini belirleyen bir script’i göstermektedir:

public class PlayerController : MonoBehaviour
{
    public float moveSpeed = 10f;
    public int playerScore = 0;
    private Rigidbody2D rb;

    void Start()
    {
        rb = GetComponent<Rigidbody2D>();
        playerScore = 0;
        transform.position = new Vector3(0, 0, 0);
    }

    void FixedUpdate()
    {
        float horizontal = Input.GetAxis("Horizontal");
        float vertical = Input.GetAxis("Vertical");
        Vector2 move = new Vector2(horizontal, vertical);
        rb.AddForce(move * moveSpeed);
    }

    void OnTriggerEnter2D(Collider2D other)
    {
        if (other.gameObject.CompareTag("Coin"))
        {
            playerScore++;
            Destroy(other.gameObject);
        }
    }
}

Bu örnekte, oyuncu nesnesi, Start() metodunu kullanarak oyuncunun başlangıç pozisyonunu belirliyor ve skorunu sıfırlıyor. Ayrıca, oyuncu nesnesinin hareketini kontrol etmek için FixedUpdate metodu kullanılıyor ve oyuncu nesnesi, diğer nesnelerle etkileşim kurması durumunda OnTriggerEnter2D metodunu kullanıyor.

Start metodunu kullanarak, oyuncu nesnesi gibi birçok farklı nesnenin başlangıç ayarlarını ve diğer nesnelerle etkileşimlerini belirleyebilirsiniz.

FixedUpdate Metodu

FixedUpdate metodu, MonoBehaviour sınıfı tarafından tanımlanan bir öğe olup, oyun nesnesinin her fiziksel adımında çağrılır. Fiziksel adımlar, oyun dünyasındaki nesnelerin konumlarının ve davranışlarının hesaplandığı zaman dilimleridir ve her adımda nesnelerin konumları, hızları ve diğer fiziksel özellikleri güncellenir.

FixedUpdate metodu, nesnenin fiziksel özelliklerini güncellemek için kullanılır. Bu metot, oyun nesnesinin konumunu, dönüşünü veya ölçeğini her fiziksel adımda değiştirmek için kullanılabilir. Ayrıca, FixedUpdate metodu, oyun nesnesinin çarpışmalarını yönetmek ve fiziksel davranışlarını kontrol etmek için de kullanılabilir.

Örnek olarak, bir arabanın FixedUpdate metodu, aracın hızını ve yönünü kontrol etmek için kullanılabilir. Ayrıca, aracın fiziksel özelliklerini, örneğin süspansiyonunu veya lastiklerini ayarlamak için de kullanılabilir.

Aşağıdaki örnek, bir araba nesnesinin FixedUpdate metodu kullanarak aracın hareketini kontrol etmesini gösterir:

using UnityEngine;

public class Araba : MonoBehaviour
{
    public float hiz = 10f;
    public float donmeHizi = 5f;

    void FixedUpdate()
    {
        // Arabayı hareket ettir
        float ileriInput = Input.GetAxis("Vertical");
        float donmeInput = Input.GetAxis("Horizontal");

        Rigidbody rb = GetComponent<Rigidbody>();
        rb.AddForce(transform.forward * ileriInput * hiz);
        rb.AddTorque(transform.up * donmeInput * donmeHizi);
    }
}

Bu örnekte, FixedUpdate metodu, klavyeden gelen ileri ve dönme girdilerini alır ve bunları kullanarak araba nesnesinin hareketini kontrol eder. Rigidbody bileşenini alır ve AddForce ve AddTorque yöntemlerini kullanarak aracı belirli bir hızda hareket ettirir ve döndürür. Bu şekilde, araba nesnesi her fiziksel adımda kullanıcının girdilerine göre hareket eder ve gerçekçi bir araba simülasyonu sağlanır.

Update Metodu

Update metodu, MonoBehaviour sınıfı tarafından tanımlanan bir öğe olup, oyun nesnesinin her karede bir kez çağrılır. Bu metot, oyun nesnesinin çalıştığı her karede güncelleme işlemlerinin gerçekleştirilmesini sağlar.

Update metodu, oyun nesnesinin her karede ne yapacağını belirlemek için kullanılır. Bu metot, oyun nesnesinin konumunu, dönüşünü veya ölçeğini her karede değiştirmek için kullanılabilir. Ayrıca, Update() metodu, oyun nesnesinin çevresindeki dünyayı veya diğer nesneleri algılamak veya kullanıcının girdilerini yakalamak gibi diğer önemli görevler için de kullanılabilir.

Örnek olarak, bir oyun nesnesinin Update metodu, nesnenin hareketini kontrol etmek için kullanılabilir. Örneğin, bir karakter nesnesinin Update metodu, klavyeden gelen girdilere göre karakterin hareketini kontrol edebilir. Ayrıca, Update metodu, karakter nesnesinin animasyonlarını oynatmak veya diğer özelliklerini ayarlamak için de kullanılabilir.

Aşağıdaki örnek, bir top nesnesinin Update metodu kullanarak topun hareketini kontrol etmesini gösterir:

using UnityEngine;

public class Top : MonoBehaviour
{
    public float hareketHizi = 5f;

    void Update()
    {
        // Topu hareket ettir
        float yatayInput = Input.GetAxis("Horizontal");
        float dikeyInput = Input.GetAxis("Vertical");

        Rigidbody rb = GetComponent<Rigidbody>();
        rb.velocity = new Vector3(yatayInput, 0f, dikeyInput) * hareketHizi;
    }
}

Bu örnekte, Update metodu, klavyeden gelen yatay ve dikey girdileri alır ve bunları kullanarak top nesnesinin hareketini kontrol eder. Rigidbody bileşenini alır ve velocity özelliğini kullanarak topu belirli bir hızda hareket ettirir. Bu şekilde, top nesnesi her karede kullanıcının girdilerine göre hareket eder ve interaktif bir oyun deneyimi sağlanır.

LateUpdate

MonoBehaviour sınıfı, Unity’nin oyun nesneleri üzerinde çalıştığı birçok farklı metot içerir ve bunlardan biri de LateUpdate metodudur.

LateUpdate metodu, her karede Update metodunun tamamlanmasından hemen sonra çağrılır. Bu metot, genellikle kamera ve karakter hareketi gibi şeyleri güncellemek için kullanılır.

LateUpdate metodunu kullanmak, kamera ve karakter hareketi gibi şeylerde hatalı sonuçlara neden olabilecek durumları önlemeye yardımcı olur. Örneğin, karakter hareketi sırasında kamera konumunun güncellenmesi, kamera hareketinin karakter hareketiyle ayarlanmasına ve daha doğru bir sonuç elde edilmesine yardımcı olur.

Aşağıdaki örnek, karakter hareketi ve kamera takibi için LateUpdate metodu kullanıyor:

using UnityEngine;

public class CharacterController : MonoBehaviour
{
    public float moveSpeed = 5f;

    private Vector3 moveDirection;

    void Update()
    {
        // Karakteri hareket ettir
        float horizontal = Input.GetAxis("Horizontal");
        float vertical = Input.GetAxis("Vertical");

        moveDirection = new Vector3(horizontal, 0, vertical).normalized;
    }

    void LateUpdate()
    {
        // Kamerayı takip et
        Camera.main.transform.position = transform.position - new Vector3(0, 0, 10);
        Camera.main.transform.LookAt(transform.position);
    }

    void FixedUpdate()
    {
        // Karakteri fiziksel olarak hareket ettir
        Rigidbody rb = GetComponent<Rigidbody>();
        rb.MovePosition(rb.position + transform.TransformDirection(moveDirection) * moveSpeed * Time.fixedDeltaTime);
    }
}

Bu örnekte, Update metodunda kullanıcı girdileri alınır ve LateUpdate metodunda kamera takibi yapılır. Karakter hareketi için FixedUpdate metodu kullanılır.

LateUpdate metodunda, kameranın konumu ve yönü, karakter nesnesinin konumuna göre ayarlanır. Bu, kamera konumunun her karede güncellenmesini sağlar ve karakter hareketi sırasında kamera pozisyonunun doğru şekilde takip edilmesini sağlar.

Sonuç olarak, LateUpdate metodu, özellikle kamera hareketi gibi nesnelerin konumunun güncellenmesinde önemlidir ve doğru sonuçlar elde etmek için kullanılır.

OnDisable Metodu

Unity’nin oyun nesneleri üzerinde çalıştığı birçok farklı metot içerir ve bunlardan biri de OnDisable metodudur.

OnDisable metodu, MonoBehaviour sınıfındaki diğer metodlar gibi, oyun nesnesi bileşeninin hayat döngüsünün bir parçasıdır. Bu metot, oyun nesnesi bileşeni devre dışı bırakıldığında, yani nesne sahne hiyerarşisinden kaldırılarak devre dışı bırakıldığında çağrılır.

OnDisable metodu, nesne etkin olmadığı zaman yapılması gereken işlemleri gerçekleştirmek için kullanılır. Örneğin, bir oyuncunun kontrolleri devre dışı bırakıldığında, oyuncunun hızı sıfırlanabilir veya ses efektleri durdurulabilir.

Aşağıdaki örnek, OnDisable metodunu kullanarak bir oyuncu nesnesi bileşeninin diğer bileşenleri ile etkileşimini kontrol ediyor:

using UnityEngine;

public class PlayerController : MonoBehaviour
{
    public float speed = 5.0f;
    public GameObject bulletPrefab;
    public Transform bulletSpawnPoint;

    private Rigidbody rb;

    void Awake()
    {
        // Rigidbody bileşenine eriş
        rb = GetComponent<Rigidbody>();
    }

    void OnEnable()
    {
        // Mermi oluşturmak için diğer bileşenleri etkinleştir
        bulletPrefab.SetActive(true);
        bulletSpawnPoint.gameObject.SetActive(true);
    }

    void OnDisable()
    {
        // Mermi oluşturmak için diğer bileşenleri devre dışı bırak
        bulletPrefab.SetActive(false);
        bulletSpawnPoint.gameObject.SetActive(false);
    }

    void Update()
    {
        // Oyuncunun hareketini kontrol et
        float horizontal = Input.GetAxis("Horizontal");
        float vertical = Input.GetAxis("Vertical");

        Vector3 movement = new Vector3(horizontal, 0.0f, vertical);
        rb.AddForce(movement * speed);

        // Mermi oluşturmak için Space tuşuna bas
        if (Input.GetKeyDown(KeyCode.Space))
        {
            Instantiate(bulletPrefab, bulletSpawnPoint.position, bulletSpawnPoint.rotation);
        }
    }
}

Bu örnekte, OnDisable metodu, diğer bileşenlerin devre dışı bırakılması için kullanılır. Bu sayede, oyun nesnesi bileşeni devre dışı bırakıldığında, mermi oluşturmak için gerekli bileşenler de devre dışı bırakılacaktır. Bu da oyun sırasında gereksiz bellek kullanımının önlenmesine yardımcı olur.

OnDisable metodu, nesne etkin olmadığı zaman yapılması gereken işlemleri gerçekleştirmek için kullanılabilir.

OnDestroy Metodu

OnDestroy metodu, MonoBehaviour sınıfındaki diğer metodlar gibi, oyun nesnesi bileşeninin hayat döngüsünün bir parçasıdır. Bu metot, oyun nesnesi yok edildiğinde, yani nesne sahne hiyerarşisinden tamamen kaldırılarak yok edildiğinde çağrılır.

OnDestroy metodu, nesne yok edildiğinde yapılması gereken işlemleri gerçekleştirmek için kullanılır. Örneğin, bir oyuncu nesnesi yok edildiğinde, oyuncunun puanı kaydedilebilir veya diğer nesnelerin davranışlarına etki eden değişkenler sıfırlanabilir.

Aşağıdaki örnek, OnDestroy metodunu kullanarak bir oyuncu nesnesi bileşeninin diğer bileşenleri ile etkileşimini kontrol ediyor:

using UnityEngine;

public class PlayerController : MonoBehaviour
{
    public float speed = 5.0f;
    public GameObject bulletPrefab;
    public Transform bulletSpawnPoint;

    private Rigidbody rb;

    void Awake()
    {
        // Rigidbody bileşenine eriş
        rb = GetComponent<Rigidbody>();
    }

    void OnDestroy()
    {
        // Oyun bittiğinde diğer bileşenleri yok et
        Destroy(bulletPrefab);
        Destroy(bulletSpawnPoint.gameObject);
    }

    void Update()
    {
        // Oyuncunun hareketini kontrol et
        float horizontal = Input.GetAxis("Horizontal");
        float vertical = Input.GetAxis("Vertical");

        Vector3 movement = new Vector3(horizontal, 0.0f, vertical);
        rb.AddForce(movement * speed);

        // Mermi oluşturmak için Space tuşuna bas
        if (Input.GetKeyDown(KeyCode.Space))
        {
            Instantiate(bulletPrefab, bulletSpawnPoint.position, bulletSpawnPoint.rotation);
        }
    }
}

Bu örnekte, OnDestroy metodu, diğer bileşenlerin yok edilmesi için kullanılır. Bu sayede, oyun nesnesi bileşeni yok edildiğinde, mermi oluşturmak için gerekli bileşenler de yok edilecektir. Bu da oyun sırasında gereksiz bellek kullanımının önlenmesine yardımcı olur.

OnDestroy metodu, nesne yok edildiğinde yapılması gereken işlemleri gerçekleştirmek için kullanılabilir. Böylece, nesne yok edildiğinde yapılacak işlemler için bu metod kullanılabilir.

Update, FixedUpdate ve LateUpdate Kullanımı

Unity MonoBehaviour sınıfında yer alan Update, LateUpdate ve FixedUpdate metotları, oyun nesnelerinin farklı zamanlarda güncelleme işlemlerini yapmasını sağlar.

Update metodu, her kare (frame) için bir kez çağrılır ve oyun nesnelerinin herhangi bir güncelleme işlemini yapması için kullanılır. Bu metot, nesnelerin pozisyon, dönüş ve ölçek gibi özelliklerini güncellemek için kullanılabilir.

FixedUpdate metodufizik güncellemelerinin yapılması için kullanılır ve oyun nesnelerinin sabit bir hızda hareket etmesini sağlar. Bu metot, fizik tabanlı nesnelerin işlevlerini kontrol etmek için kullanılır ve hareket ve çarpışma algılaması gibi işlemlerle ilgilidir.

LateUpdate() metodu ise, Update metodu tamamlandıktan sonra çalıştırılır. Bu metot, diğer nesnelerin hareketlerini güncelledikten sonra, kendi nesnesinin hareketlerini güncellemek için kullanılır. Örneğin, kamera nesnesi, diğer nesnelerin hareketini takip etmek için LateUpdate() metodunu kullanabilir.

Bu metotlar arasındaki fark, hangi zamanlarda çağrıldıklarından kaynaklanır.

  • Update metodu, her karede bir kez çağrılır ve oyun nesnesinin herhangi bir güncelleme işlemi için kullanılabilir.
  • FixedUpdate metodu, sabit bir zaman diliminde çağrılır ve oyun nesnelerinin fizik tabanlı işlevlerini kontrol etmek için kullanılır.
  • LateUpdate metodu ise, diğer nesnelerin hareketlerini güncelledikten sonra kendi nesnesinin hareketlerini güncellemek için kullanılır.

Bu metotlar arasında seçim yapmak, kullanılan nesnenin özelliklerine ve işlevlerine bağlıdır. Örneğin, fizik tabanlı bir nesne, FixedUpdate metodu kullanarak sabit bir hızda hareket etmeli ve çarpışmaları algılamalıdır. Kamera nesnesi ise, diğer nesnelerin hareketlerini takip etmek için LateUpdate metodunu kullanabilir. Update metodu ise, diğer işlevlerin güncellenmesi için kullanılabilir.

Kaynak:

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir