Şimdi Ara

Unity android cihazda sahneler arası gecikme

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
19
Cevap
0
Favori
1.318
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Arkadaşlar Merhaba

    Unity 5.4 1f1 programında basit 2D bir oyun yaptım. Oyun mantığıhttps://www.youtube.com/watch?v=MQ2s8uoB2D8 verdiğim linkteki gibidir. Ben ekstra olarak oyuna main menü ekledim. Play, about, quit butonları. Bu butonlar bilgisayarda sorunsuz çalışıyorlar fakat oyunu Android telefona build ettiğimde Play tuşu 4-5 saniyelik bir gecikmenin ardından oyunu başlatıyor.

    Bu problemi nasıl giderebilirim ? Buradaki sorun nedir ? Bu problem ile daha önce karşılaşan var mı ?



  • Bomboş bir bölüm yapınca da aynı gecikme oluyor mu?
  • Daha önceki denemelerimde sırasıyla sound effectleri, background ve hatta karakteri bile kaldırmıştım. Fakat problem devam etmişti.

    Az önce söylediğiniz şekilde boş, yeni sahne oluşturup onu denedim fakat hiçbir gecikme olmadan boş sahneye geçiş yaptı.



    < Bu mesaj bu kişi tarafından değiştirildi patitos -- 18 Kasım 2016; 14:10:14 >
  • patitos P kullanıcısına yanıt
    Bu sorunu çözmenin bir yolu yok LoadLevelAsync metodunu kullanman belki biraz azaltabilir ama tamamen engelleyemezsin nedeni kaplama ve envai çeşit kaynağın main thread de yüklenmesş zorunluluğudur.

    < Bu ileti mobil sürüm kullanılarak atıldı >
  • Cevabınız için teşekkür ederim. Söylediğiniz metodu araştıracağım ve onu uygulayacağım. SceneManager.LoadScene kullanmıştım.

    Oyunun apk boyutu 25MB ve oyun fazla grafik barındırmıyor. Böyle bir gecikme şaşırttı açıkcası.
    İlerleyen seviyelerde bu gibi durumlarla karşılamamak için veya önüne geçmek için ne önerirsiniz ?
    Unity 2D oyun geliştirmek için uygun bir platform değil diyebilir miyiz ? Herhangi başka bir platform önerebilir misiniz ?
  • quote:

    Orijinalden alıntı: patitos

    Cevabınız için teşekkür ederim. Söylediğiniz metodu araştıracağım ve onu uygulayacağım. SceneManager.LoadScene kullanmıştım.

    Oyunun apk boyutu 25MB ve oyun fazla grafik barındırmıyor. Böyle bir gecikme şaşırttı açıkcası.
    İlerleyen seviyelerde bu gibi durumlarla karşılamamak için veya önüne geçmek için ne önerirsiniz ?
    Unity 2D oyun geliştirmek için uygun bir platform değil diyebilir miyiz ? Herhangi başka bir platform önerebilir misiniz ?

    Telefon saniyede beş mb okuyabiliyordur diskten. O nedenle gecikiyordur belki.

    < Bu ileti mobil sürüm kullanılarak atıldı >
  • Main menu ve boş sahne olarak denediğimde oyunun apk boyutu 20mb olmuştu. 20mb iken boş sahneye hemen geçiş yapmıştı.
  • quote:

    Orijinalden alıntı: patitos

    Main menu ve boş sahne olarak denediğimde oyunun apk boyutu 20mb olmuştu. 20mb iken boş sahneye hemen geçiş yapmıştı.

    Lazy initializing denedin mi peki? Yani birşey sadece kullanılacağı zaman constructor çalışsın veya instantiate edilsin gibi. Kullanılmayan şey ekranın hemen dışında beklemesin mesela veya beklesin de önceden yaratılmışsa beklesin ama ilk ekran geldiğinde dışarda birşey boşta durmasın yani.

    < Bu ileti mobil sürüm kullanılarak atıldı >
  • Oyun zaten tamamen o mantık üzerine kurulu. Sadece başlangıçta sabit platform var, karakterin yürüyeceği platformlar ve toplayacağı coinler belirli zaman aralıklarında rastgele sahneye yükleniyor. Karakerin ardından da bir Destroyer karakteri takip ederek arkada kalan platform ve coinleri yok ediyor.



    < Bu mesaj bu kişi tarafından değiştirildi patitos -- 18 Kasım 2016; 14:46:6 >
  • quote:

    Orijinalden alıntı: patitos

    Oyun zaten tamamen o mantık üzerine kurulu. Sadece başlangıçta sabit platform var, karakterin yürüyeceği platformlar ve toplayacağı coinler belirli zaman aralıklarında rastgele sahneye yükleniyor. Karakerin ardından da bir Destroyer karakteri takip ederek arkada kalan platform ve coinleri yok ediyor.

    playe bastıktan sonra oluşan verileri kaydetse ve sonraki açılışta hiç kasmadan o verileri açsa olmaz mı peki? ama gerçi o zaman unity nin kolaylığı kalmaz. Tek tek tüm nesnelere bakacan da diske kaydetçen sonra iyice yavaş açılış olur ilk başta.

    Rastgele sayı üreteci kastırıyorsa eğer, gpu ya işlem yaptırabilirsin belki.



    < Bu mesaj bu kişi tarafından değiştirildi Tugrul_512bit -- 18 Kasım 2016; 15:38:13 >
  • Çözüm çok basit ama sen görmüyorsun. Ana menüyle oyun levelini ayrı bir scene olarak yapma ikisi aynı scenede bulunsun böylece oyun açılırken aynı zamanda sahneyi loadlamış olur. Yeni bir sahneyi loadlamak zaman alabiliyor ama o sahnede sürekli kalırsan gecikme falan olmuucaktır.

    Tek yapman gereken Ana Menü ile Oyun Scenelerini birleştirmek. Çoğu hatta tüm küçük mobil oyunlar tek Scenedir.
  • Cevabınız için teşekkür ederim. Söylediğiniz gerçekten çok mantıklı hemen deneyeceğim. Son durumu buraya tekrar yazarım.

    Ayrıca Zafer Korkmaz sizin diğer konulara cevaplarınızı okudum. Uygulama geliştirme konusunda deneyimli olduğunuz belli. Sizi takip edebileceğim bir web sitesi, blog, veya youtube kanalı var mı?
  • quote:

    Orijinalden alıntı: patitos

    Cevabınız için teşekkür ederim. Söylediğiniz gerçekten çok mantıklı hemen deneyeceğim. Son durumu buraya tekrar yazarım.

    Ayrıca Zafer Korkmaz sizin diğer konulara cevaplarınızı okudum. Uygulama geliştirme konusunda deneyimli olduğunuz belli. Sizi takip edebileceğim bir web sitesi, blog, veya youtube kanalı var mı?

    Malesef yok ama ilerde bu konu hakkında kaliteli bir youtube kanalı açıcam sanırım. Çizim, Modelleme, Programlama dersleri olucak.
  • İyi akşamlar biraz geç oldu ama benzer problemle karşılaşıp, çözüm üretemeyen arkadaşlar belki faydalanabilirler diye düşündüm ve yazmak istedim.. Zafer Korkmaz'ın dediği gibi oyunu tek sahneye indirgedim. Yani menü sahnesi,oyun sahnesi,sonuç sahnesini aynı sahne içerisinde yerleştirdim. GameObjectlerin enable ve disable edilmesi gerekiyor. Script dosyalarınızın içine yazacağınız bir kaç küçük if döngüsü ile kolaylıkla geçişlerdeki yavaşlama sorunun üstesinden gelebiliyorsunuz.

    Yani ne demek istiyorum. Başlangıçta menü canvası enable durumunda,game scene ve dead canvas disable. Eğer play butonuna tıklanırsa menü canvas disable,game scene enable,dead canvas disable durumuna geliyor. Karakter öldüğünde ise menü canvas disable,game scene disable,dead canvas enable durumuna geliyor. Play again komutu ile döngü baştan başlatılıyor.



    < Bu mesaj bu kişi tarafından değiştirildi patitos -- 7 Aralık 2016; 19:16:41 >
  • Peki içerisinde 15-20 bölüm olan 2d platform oyunlarında bu yavaş sahne geçişlerini nasıl çözebiliriz? Fikri olan var mı acaba?
  • quote:

    Orijinalden alıntı: 1ht1baron

    Peki içerisinde 15-20 bölüm olan 2d platform oyunlarında bu yavaş sahne geçişlerini nasıl çözebiliriz? Fikri olan var mı acaba?

    Ilk Mapi oynarken Ikincisini arkaplanda loadlarsın. Ikinciyi oynarken Üçüncüyü loadlarsın böylece gecikme olmaz

    https://docs.unity3d.com/ScriptReference/Application.LoadLevelAsync.html
  • Çok teşekkür ederim. Loadlevelasync metodunu araştıracağım.

    < Bu ileti mobil sürüm kullanılarak atıldı >
  • Ön bilgilendirme olarak.
    Level sonuçta bir veri olduğu için initialize ve asset yüklemeleri süre alacaktır. Bu süre cihazın performansına bağlı olarak değişiklik göstermekle beraber doğal olarak mobil cihazlarda bilgisayardakinden daha yavaş olur. Geliştiriciler Loading ekranını boşuna koymuyor oyunlara. Leveli asenkron olarak yüklesen bile gecikme kaçınılmazdır (Süre azalabilir yada hatta belki artabilir çünkü Asenkron yükleme işlemi main thread dışına yapılır arayüzün kullanılabilir kalması için).

    Gelelim önerebileceğim çözümlere.

    İlk olarak ben hiç bekleme olsun istemiyorum dersen. Bütün levelleri oyunun ilk açılışında yükleyebilirsin, oyunun ilk açılışı haliyle daha fazla sürecektir. Ama büttün gerekli assetler yüklenmiş olacağından istediğin levelin objelerini enable disable ederek neredeyse anında leveli oyuncuya sunabilirsin.

    İkinci olarak bir yükleme ekranı oluşturman. Playe bastığında ekrana bir arkaplan ile birlikte loading yazısı çıkar mesela. Burada LoadLevelAsync kullanarak level yüklemeni yaparsın bu arada loading ekranında animasyon filanda oynatabilirsin çünkü yükleme asenkron olacak.

    Üçüncü seçenek (Ben şuanki projemde bunu kullanıyorum) Bütün oyun tek scenede. Gerekli level assetleri prefab olarak resource klasöründe tutuluyor. Ve bu assetler gerektiğinde asenkron olarak yükleniyor lazım olmadığındada unload edilerek memoryde yer açılıyor.

    Oyunun ihtiyacına göre farklı çözümler gerekebilir. Fikir edinmen açısından yukarıdaki örnekleri söylemiş olayım.




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