Şimdi Ara

Unity Callback Fonksiyonları

Koronavirüs Özel
Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
3 Misafir - 3 Masaüstü
10
Cevap
0
Favori
526
Tıklama
Sayfaya Git:
Sayfa:
1
Giriş
Mesaj
  • Yüzbaşı
    390 Mesaj
    Unity Callback Fonksiyonları
    Unityde bazı fonksiyonları neden update içinde ya da başka fonksiyonların içinde çağıramıyoruz?
    Neden bunları ayrı bir şekilde yazıyoruz? Update içinde ya da kendi fonksiyonlarımız içinde direkt kullansaydık daha kolay olmaz mıydı?



    Bunu yapamamazın sebebi bu fonksiyonların callback olmasıdır.
    Nedir bu callback fonksiyonları?
    Callback fonksiyonları Unity tarafından sizin yerinize çağırılan fonksiyonlardır.
    Biz neden çağıramayız?
    Çünkü daha etkili, Örneğin OnTriggerEvent sizin yerinize fizik motoru tarafından çağırılıyor.

    Callback fonksiyonlarını bağımsız kullanmazsak bazı sorunlara neden olabilir.

     void Update()  //Tahmin edebileceğiniz gibi Update() de bir callback fonksiyonu 

    {

    Update(); //Genelde callback fonksiyonlarını içiçe kullanamazsınız aslında

    //ama başardığınızda da sonuç bu
    }


    Üstte gördüğümüz kod Update'in bilgisayarınız çökene kadar maksimum hızla çağırılmasına sebep olacaktır.(Recursive function)

    Hangi Fonksiyonlar Callback?


    Buraya tıklayarak; Unity kılavuzundan MonoBehaviour kısmına gelirseniz, Messages kısmında gösterilen bütün fonksiyonlar callback fonksiyonudur.


    Peki Nasıl Çalışıyor? Performansı Nasıl Arttırıyor?

    Callback fonksiyonları sadece gerekli olduğunda çalışırlar.
    Fırına bir kek koyduğumuzu düşünelim. Bu kekin pişip pişmediğini test etmek için iki yolumuz var.
    1-Sürekli olarak kekin pişip pişmediğini kontrol etmek. ( Update(kek); )
    2-Fırının kek pişince bize haber vermesi.

    Fırın burada fizik motoru veya oyun motorunun kendisi oluyor.

    *Callback: Başka bir fonksiyona önce argüman olarak verilip sonra o fonksiyonun iradesinde çağırılan fonksiyona denir.Geri arama anlamına geliyor.

    Sitemde oku



    < Bu mesaj bu kişi tarafından değiştirildi Al1mert -- 14 Ağustos 2018; 11:20:29 >



    |
    |
    _____________________________












    "çocukken her akşam yatmadan önce tanrı'ya bana bir mercedes vermesi için dua ederdim. bir gün tanrı'nın çalışma tarzının bu olmadığını anladım ve diyanet işleri başkanı oldum."




  • Yüzbaşı
    390 Mesaj
    C# (ya da başka dil :P) bilenler zaten biliyordur bunu ya da callback olduklarını az buçuk tahmin etmişlerdir. Ama C# bilmeyip aklına takılanlar illa vardır:)
    |
    |
    _____________________________












    "çocukken her akşam yatmadan önce tanrı'ya bana bir mercedes vermesi için dua ederdim. bir gün tanrı'nın çalışma tarzının bu olmadığını anladım ve diyanet işleri başkanı oldum."
  • Yarbay
    2798 Mesaj
    Diyelim bir enemy'miz var. Collider ekleyip bize OnTriggerEnter ile bize dokunduğunda atak yapması mı daha az performans harcar? Yoksa Update içine if(enemy.transform.position = player.transform.position) yapıp yanına yaklaşınca atak yapması mı daha az performans harcar?
    _____________________________
  • Yüzbaşı
    390 Mesaj

    İkisininde harcayacağı performans önemsiz sayılır ama mantık olarak daha az çalışacağı için collider, ama duruma göre değisir.

    2.kod işe yaramaz bu arada, iki objeninde üst üste olması gerekir atak yapmak için, onun yerine vector3leri arasındaki mesafeyi alıp ölçebilirsin.



    update ile her frame işlem yapacağına coroutine kullanadabilirsin



    < Bu ileti DH mobil uygulamasından atıldı >
    |
    |
    1ht1baron kullanıcısının, bahsedilen mesajını gör
  • Yarbay
    2798 Mesaj

    Evet, vector3 ile biliyorum fakat mobilden girdiğim için yazmaya üşenmiştim
    Mesela 2d bir oyunda colliderin ontriggerenter2d ile değip atak yapmasını mı tercih ederdiniz? Yoksa update fonksiyonun içinde vector3 ile x posizyonlarının arasında 1 mesafe kalınca coroutine ile atak yapmasını mı? Hangisi en iyi performansa sahip olurdu acaba?



    < Bu mesaj bu kişi tarafından değiştirildi 1ht1baron -- 14 Ağustos 2018; 12:55:30 >
    |
    |
    Al1mert kullanıcısının, bahsedilen mesajını gör
    _____________________________
  • Yarbay
    2103 Mesaj
    quote:

    Orijinalden alıntı: 1ht1baron

    Diyelim bir enemy'miz var. Collider ekleyip bize OnTriggerEnter ile bize dokunduğunda atak yapması mı daha az performans harcar? Yoksa Update içine if(enemy.transform.position = player.transform.position) yapıp yanına yaklaşınca atak yapması mı daha az performans harcar?
    OnTriggerEnter fonksiyonu zaten unityengine'de optimize edilmiş bir fonksiyon.



    Callback ve event sistemi birlikte anlatsaydınız keşke, callback zaten çok kısa ve programlama temeli olan herkesin anlayabileceği bir şey.



    Bu video gibi:
    https://www.youtube.com/watch?v=04wXkgfd9V8
    _____________________________




  • Yarbay
    2798 Mesaj

    Konuyla alakasız bir sorum olacaktı. Mesela arka plan öğelerimiz (bulutlar, ağaçlar, dağlar) var. Bunları 1 sahnede bol bol kullanıyoruz. 100 ağaç, 25 bulut, 15 dağ gibi. Bunları dümdüz yerleştirmek ile prefab yapıp yerleştirmek arasında performans açısından bir fark olur mu?



    < Bu ileti mini sürüm kullanılarak atıldı >
    |
    |
    Requizm kullanıcısının, bahsedilen mesajını gör
    _____________________________
  • Yarbay
    2103 Mesaj

    quote:

    Orijinalden alıntı: Requizm

    OnTriggerEnter fonksiyonu zaten unityengine'de optimize edilmiş bir fonksiyon.



    Callback ve event sistemi birlikte anlatsaydınız keşke, callback zaten çok kısa ve programlama temeli olan herkesin anlayabileceği bir şey.



    Bu video gibi:
    https://www.youtube.com/watch?v=04wXkgfd9V8

    Alıntıları Göster
    Prefab daha performanslı olacağını düşünüyorum ancak elimde hiç sayı, kanıt yok. Prefab zaten bol bol kullanılmak için yapılmış bir bileşen.

    İnternetten araştırdım, çoğu kişi prefab'ın iyi olduğu yönünde. Şöyle bir istatistikte buldum:





    Instance 1,000 empty game object prefabs: 47ms, 19ms, 21ms



    Instance 1,000 empty game object scene instances: 89ms, 58ms, 56ms





    Average time per instance



    prefab: .029 milliseconds per instance



    scene instance: .067 milliseconds per instance





    Edit:yanlış alıntı



    < Bu mesaj bu kişi tarafından değiştirildi Requizm -- 16 Ağustos 2018; 12:36:22 >
    |
    |
    Bahsedilenler: 1ht1baron
    _____________________________




  • Yarbay
    2798 Mesaj

    https://forum.unity.com/threads/gameobject-instantiate-prefab-vs-scene-instance.259408/

    instantiate yaparak o sonuçları almış. Fakat ben instantiate yapmadan sadece dümdüz dağları, ağaçları yerleştirdim. Onun yerine mesela ağacı prefaba alıp daha sonra oyuna yerleştirsem bir farkı olmaz mı sizce?
    |
    |
    Requizm kullanıcısının, bahsedilen mesajını gör
    _____________________________
  • Yarbay
    2103 Mesaj
    quote:

    Orijinalden alıntı: 1ht1baron

    https://forum.unity.com/threads/gameobject-instantiate-prefab-vs-scene-instance.259408/

    instantiate yaparak o sonuçları almış. Fakat ben instantiate yapmadan sadece dümdüz dağları, ağaçları yerleştirdim. Onun yerine mesela ağacı prefaba alıp daha sonra oyuna yerleştirsem bir farkı olmaz mı sizce?
    Sen elinle koysan bile her oyun/test/sahne başlangıcında instantiate yapılıyor arka planda.
    |
    |
    _____________________________
Sayfaya Git:
Sayfa:
1
Reklamlar
kolayoto.com
bankalar.org
Media Sözlük
Canlı Tv izle
SEO
Bu sayfanın
Mobil sürümü
Mini Sürümü

BR6
0,219
1.2.165

Reklamlar
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.