Unity Çerez Ders: Büyük Texture’ları (TIFF, PSD, TGA, BMP) PNG Formatına Çevirerek Proje Boyutunu Düşürmek

Yayınlandı: 13 Mart 2021 yasirkula tarafından Oyun Tasarımı, UNITY 3D içinde

Yeniden merhabalar,

Asset Store’dan projenize import ettiğiniz veya ekibinizdeki grafikerlerden aldığınız Texture’ların bazen tek bir tanesinin bile onlarca MB (ender durumlarda yüzlerce MB) yer kapladığına şahit olabilirsiniz. Bu durum genelde resmin sıkıştırılmamış TIFF veya TGA gibi bir formatta olmasından kaynaklanır. Bu resimleri PNG‘e çevirerek, kalitede hiçbir bozulma olmadan bu dosyaların boyutlarını ciddi miktarlarda düşürebilirsiniz. Örneğin ben Asset Store’dan import ettiğim bir 3D asset’in bu tarz Texture’larını PNG’e çevirerek, projenin boyutunu 1.08 GB’dan 510 MB’a kadar düşürdüm. Yanlış anlaşılma olmasın: Texture’ların sadece Unity projesinde kapladığı alan düşüyor, build alınan oyunun boyutu değişmiyor. Ama bu bile, projenin harddiskinizde daha az yer kaplaması veya projenin daha kolay yedeklenebilmesi gibi konularda yardımcı oluyor.

Bu iş için yazdığım editör script’ini görmek için yazının devamını okuyabilirsiniz…

Yapmanız gereken, projenizin Editor klasöründe (bu klasör yoksa oluşturun) ConvertTexturesToPNG adında yeni bir C# script oluşturmak ve script’in içeriğini şuradaki kodla değiştirmek: https://gist.github.com/yasirkula/407e15017a01324a9ea95bf1bdea72f7

Ardından Window-Convert Textures to PNG ile Convert to PNG penceresini açabilirsiniz. Buradaki ayarlar şunlar:

  • Root Path: bu klasör içindeki resimler PNG’e çevrilir. Alt klasörlerdeki resimler de çevrilirler
  • Textures to Convert: sadece bu uzantılara sahip resimler PNG’e çevrilirler
  • Excluded Directories: bu klasör(ler)deki resimlere dokunulmaz. İki klasörün konumunu ; (noktalı virgül) ile birbirinden ayırabilirsiniz (Textures to Convert‘te olduğu gibi)
  • Keep Original Files: eğer işaretlenirse, PNG’e çevrilen resimlerin asıllarına dokunulmaz; işaretlenmezse resimlerin asılları otomatik olarak silinirler
  • Max Texture Size: bu ebattan büyük resimlerin boyutu bu ebata düşürülür
  • OptiPNG Path: hazır bir PNG sıkıştırma kütüphanesi olan OptiPNG ile, PNG’e çevrilen resimlerin boyutunu yaklaşık %20 daha küçültmeye yarar. Bunun için önce optipng.exe dosyasını indirmeli (şuradaki Windows build), ardından bu dosyanın konumunu bu kutucuğa girmelisiniz. İsterseniz bu alanı boş bırakabilirsiniz
  • OptiPNG Optimization: sadece OptiPNG Path‘in değeri girilmişse gözükür. Bu değer arttıkça, OptiPNG’nin resim boyutlarını düşürme olasılığı artar ama aynı zamanda resimlerin PNG’e çevrilmesi çok daha uzun sürer

Ayarları doldurduktan sonra, Convert to PNG! butonuna tıklayarak süreci başlatabilirsiniz. Eğer “Keep Original Files” seçeneği kapalıysa veya projenizin Editor Settings‘indeki “Asset Serialization Mode” ayarı “Force Text” ise, PNG’e çevrilen resimlerin kullanıldığı yerler otomatik olarak güncellenir (yani mesela bir materyal Resim.tiff’i Texture olarak kullanıyorduysa, materyal artık otomatik olarak Resim.png’i Texture olarak kullanır). Aksi taktirde tüm bu referansları siz elle güncellemelisiniz.

BONUS: Projedeki Tek Renkten Oluşan Texture’ları Bulmak

3D model asset’lerinde kullanılan Specular, Metallic veya Emission gibi Texture’lardan bazıları sadece tek bir renkten oluşabilir. Eğer materyalde aynı etkiyi Smoothness gibi bir float değeri değiştirerek de elde edebiliyorsak, bu tamamen boşuna bir performans kaybıdır çünkü ekran kartı o materyale sahip objeleri ekrana çizerken basit bir float’ın değerini okumak yerine, boş yere komple bir Texture’un değerini okumak zorunda kalır. Ama bazen materyaldeki float değerlerle oynasak bile, tek renkli Texture’un verdiği etkiyi elde edemeyebiliriz. Bu durumda ise yakınabileceğimiz başka bir nokta var: 3D modelciler genelde bu tek renkli Texture’ların boyutunu 32×32 gibi ufak boyutlara ayarlamazlar, 1024×1024 gibi kocaman boyutlara ayarlarlar. Texture zaten tek bir renkten oluştuğu için, 32×32 de olsa 1024×1024 de olsa birebir aynı etkiyi gösterecek olmasına rağmen o Texture’u yapan 3D artistin ihmalinden dolayı Texture boş yere 0.5 MB fazla yer kaplar ve bu fazlalık hem RAM’e hem de build alınan oyunun boyutuna etki eder (build alınan oyun sıkıştırıldığı için ona 0.5 MB’tan daha az etki eder tabi)!

Üstte bahsettiğim durumları tespit etmeye yardımcı olması için basit bir editör script’i yazdım:

Yapmanız gereken, projenizin Editor klasöründe (bu klasör yoksa oluşturun) SingleColorTextureDetector adında yeni bir C# script oluşturmak ve script’in içeriğini şuradaki kodla değiştirmek: https://gist.github.com/yasirkula/19905788e68d4c2bbb8e229b5670480a

Ardından Window-Single Color Texture Detector ile Solid Textures penceresini açıp Refresh butonuna tıklayabilirsiniz. İşlem tamamlanınca, projenizdeki tek renkten oluşan tüm Texture’lar listelenecek. Listelenen konumlardan birine çift tıklarsanız, o konumdaki Texture otomatik olarak seçilir.

Listedeki bir Texture’un nerelerde kullanıldığını bulmak için, şu dersimde paylaştığım Asset Usage Detector plugin’ini kullanabilirsiniz. Eğer ilgili Texture’un ebatları 32×32’den büyükse ve Texture’un büyük olmasını gerektirecek çok ama çok özel bir durum yoksa, ilk iş o Texture’un Max Size‘ını 32’e düşürün. Böylece o Texture’un hem RAM hem de build boyutunu optimize etmiş olacaksınız. Ardından Texture’un kullanıldığı materyallerde gerçekten gerekli olup olmadığına bakın. Eğer Texture’u materyalden kaldırınca hiçbir şey değişmiyorsa ne iyi ne âlâ, yaptığınız değişikliği kaydedin. Eğer Texture kalkınca materyalin görünümü değişiyorsa, materyaldeki float değerleri değiştirerek aynı etkiyi alabiliyor musunuz kontrol edin. Alabiliyorsanız o şekilde yaptığınız değişiklikleri kaydedin, aksi taktirde Texture’u materyale geri verin.

Bu dersi de noktaladık. Sonraki derslerde görüşmek üzere!

yorum
  1. meraklı vol2 dedi ki:

    Hocam tekrardan merhaba. Bir soru sormak istiyorum. Asset store üzerinden 2d platformer tarzında bir sprite paketi aldım. Ana karakterin saldırı animasyonları ayrı ayrı resimler halinde çizilmiş(ok atma ve kılıç saldırısı). Oyun içerisinde 2 saldırı halini de kullanmak istiyorum ama kılıç saldırısında karakterin arkasına asılı olan sadak(okları koyduğu muhafaza) çizilmemiş. Aynı şekilde ok saldırısında da kılıç çizilmemiş. Yani ok attıktan sonra kılıç sallasa sırtındaki sadak birden yok olmuş gibi olacak. Youtube üzerinde gördüğüm bu çözüm (runtime sırasında animation override controller ile yapılmış) kullanılabilir mi ? Videoyu link olarak en sona ekledim. Ve sizin bu konuda bir öneriniz var mı ? Çok teşekkür ederim. İyi çalışmalar. https://www.youtube.com/watch?v=DNSqdMcL_dU

    • yasirkula dedi ki:

      Anladığım kadarıyla karakterin arkasındaki oklar ve kılıç karakterin sprite’ına gömülüler, yani ayrı obje değiller. Bu durumda yapabileceğiniz bir şey bence yok ama yine de asset’i satın aldığınız kişiye mail atıp onun ne önereceğine de kesinlikle bakın derim.

      • meraklı vol2 dedi ki:

        Hocam cevap için teşekkür ederim. Ben aslında şu şekilde düşündüm, silah değiştirme butonu ile ok ve kılıç arasında geçiş yapılabilecek. Ancak kılıç seçiliyken, karakter üzeindeki kılıç spritelarındaki idle animasyonunun oynaması, ok seçiliyken ok spritelarının idle animasyonu oynaması lazım. 2 seçenek için(ok ve kılıç ile) ayrı ayrı idle, jump, run vs animasyonları var. Videodaki yöntem işime yarar gibi geldi ama tecrübeli olarak sizin fikrinizi merak ettim. Tekrardan teşekkür ederim. Yorumunuzu bekliyorum. Olmadı satıcıya mail atacağım ya da tek çeşit saldırı da yapabilirim ama bir geçiş tuşu işi çözebilir gibi duruyor.

      • yasirkula dedi ki:

        Belki yanlış düşünüyorum ama bu bana şöyle geliyor: bir selfie fotoğrafınız var ve bu fotoğrafta elinize bir ışın kılıcı eklemek istiyorsunuz. Yani fotoğrafta olmayan bir şeyi fotoşop ile fotoğrafa eklemek istiyorsunuz. Sizin durumunuzda da, sprite’ta olmayan kılıcı/oku siz sprite’a eklemek istiyorsunuz. Sprite’ı fotoşoplamak dışında aklıma bir şey gelmiyor. Dediğim gibi, belki ben yanlış düşünüyorumdur o yüzden asset’in satıcısı en kesin şekilde sizi yönlendirir.

    • meraklı vol2 dedi ki:

      Hocam fikriniz için teşekkür ederim. Sanırım ben anlatamadım 🙂 çünkü ok tutan karakterin idle animasyonu var, kılıç tutan karakterin de ayrı idle animasyonu var. Ben silah değiştirme butonu ile bu animasyonları runtime sırasında değiştirme işlemi verimli olur mu diyerek sormuştum. Örnek videodaki gibi ( https://www.youtube.com/watch?v=DNSqdMcL_dU0 ).Bilmiyorum bu açıklayıcı oldu mu. Siteniz genel anlamda çok faydalı bunun için ve burada insanlara bireysel yardımcı olduğunuz için çok teşekkür ederim. İyi çalışmalar

      • yasirkula dedi ki:

        Performans anlamında bir sıkıntı olmaz. Absürd durumlarda grafiksel hata olur mu bakmanız lazım. Mesela tam kılıcı sallarken animasyonu değiştirince ne olacak kontrol etmeniz lazım.

  2. efsane dedi ki:

    admin unity rigidbody2d de freeze position y yi aciyorum kodla ama nasıl kapaticagimi bulamadim acma kodum

    Rigidbody2d.constraints = RigidbodyConstraints2D.FreezePositionY böyle aciyorum ama kapatmıyorum

    • efsane dedi ki:

      kapatmıyorum

      • efsane dedi ki:

        gerek kalmadi çözdüm admin

      • efsane dedi ki:

        admin bir zamanlar bir kod gördüm ama şimdi unuttum script ile sprite a 1 den fazla resim çekmek nasıl olur

      • efsane dedi ki:

        random.range ile yapıyordum ama şimdi unuttum ıenumeratır kullanıyordum yanlış hatırlamıyorsam

      • efsane dedi ki:

        yaptım admin bana şey lazım prefab var benim image olan onu 2 tane clone ile sınırlandırmak istiyorum 2 tanden fazla clone yapmasın bunu nasıl yapabilirim kodla

      • yasirkula dedi ki:

        “static int klonSayisi = 0;” değişkenin OnEnable’da 1 artırıp OnDisable’da 1 azaltabilirsin. Eğer değer 2’ye eşitse, OnEnable’da değeri artırmak yerine objeyi Destroy edersin.

      • efsane dedi ki:

        farklı bir yöntem kullandım ama sayende oldu teşekkürler admin ama destroy hep son clone objeyi yok ediyor ben ilk clone hep yerinde sabit oluyor bunu istemiyorum ben ilk clone yok etsin bunu yapmanın yolu var mı

      • efsane dedi ki:

        daha doğrusu en önce oluşan obje yok olsun hiç bir obje sabit olmasın bunu istiyorum

      • yasirkula dedi ki:

        O zaman bir static List<GameObject> objeler = new List<GameObject>(); değişken oluşturup OnEnable’da objeyi bu listeye eklemen lazım. Eğer listenin Count’u 2’den büyük olursa, listenin 0. index’indeki elemanı Destroy edip sonra RemoveAt ile listeden çıkarman lazım.

      • efsane dedi ki:

        Unknown error occurred while loading ‘Assets/Scenes/Oyun.unity’.

        Assets/Scenes/Oyun.unity’ yüklenirken bilinmeyen bir hata oluştu.

        admin bu hatayı alıyorum internette çözümü yok diyor ama bildiğin bir çözün yolu var mı herşeyim biter bu sahne olmassa

      • yasirkula dedi ki:

        Sahneyi duplicate edip açmayı, .meta dosyasını silmeyi, Notepad++ ile açıp içinde gözüne çarpan anormal bir şey var mı kontrol etmeyi deneyebilirsin. En kötü durumda, bu acı bir hayat dersi olur: bundan böyle yaptığın projeleri git’te yedeklersin ve benzer sorun olsa da en son yedeklediğin sürümden devam edersin.

  3. Hocam merhabalar şu videodaki karakter kontrolü nasıl çalışıyor ve arkada iz bırakmayı nasıl böyle smooth yapabilirim.

    • yasirkula dedi ki:

      Karakter kontrolü için X koordinatını lerp etmek ve Z koordinatını sürekli artırmak dışında bir şey yaptıklarını sanmıyorum. Arkasında bıraktığı izi bilmiyorum, onu araştırmanız lazım.

  4. Orax Learn dedi ki:

    Github giste yonlendirmek yerine dirket embeded ile siteye kodu koysaniz olmaz mı ?

    • yasirkula dedi ki:

      Gist’lerimi arada güncelliyorum. Her seferinde sitedeki kodu da güncellemekle uğraşmak istemiyorum o yüzden böylesi benim için daha rahat oluyor.

  5. Burak dedi ki:

    Hocam Merhaba, android için 3D bir oyun yapıyorum oyunda az obje var fakat oyun telefonlarda hafif bir kasma yapıyor. Tüm objeleri low poly kullandım tüm optimizasyon videolarını izledim fakat düzeltemedim. Bilgisayarımda 350 ile 400 fps arası alıyorum 1080×1920 portrait modda ama dediğim gibi telefonlarda 30 40 fps belki daha az arada da fps drop yapıyor. Tüm scriptleri özenle optimize bir şekilde ayarladım ve kodunu ona göre yazdım ama çözemedim.

    Şöyle de saçma bir şey var 3 GB rame sahip eski model bir telefonda 30 fps sabit oynatırken yeni bir telefonda fps 20 lere düştüğü oluyor buna da anlam veremedim.

    Yardımcı olursanız sevinirim, teşekkürler.

      • Burak dedi ki:

        Sorunu çözdüm daha doğrusu neden kaynaklandığını çözdüm fakat sorunu çözemedim 🙂

        Skinned Mesh Renderer kulllanıyorum ve sahnede 30-40 düşman olmasını gerektiriyor bu sebeple oyun kasıyor. Skinned mesh renderer konsunun bir çözümü var mı ?

      • yasirkula dedi ki:

        – Player Settings’te GPU Skinning ayarını değiştirmeyi deneyebilirsiniz
        – SkinnedMeshRenderer’ların Quality’sini düşürebilirsiniz
        – LOD sistemini kullanarak uzaktaki düşmanları normal MeshRenderer ile çizebilirsiniz (o düşmanlar tamamen statik duracaklar). Bunun için düşmanın MeshRenderer ile çizildiği ayrı bir GameObject’e ihtiyacınız var, uzaktaki düşmanlar hangi statik pozda duracaklarsa bu MeshRenderer o pozda olmalı. “unity skinned mesh renderer save mesh” araması işinize yarayabilir. Ayrıca LOD sistemi dersim: https://yasirkula.com/2020/10/17/unity-lod-sistemi/
        – SkinnedMeshRenderer animasyonlarını shader ile vermek konusunda daha önce çalışmalar yapılmıştı, “unity skinned mesh renderer animation instancing” şeklinde arama yaparak bu çalışmalara bakabilirsiniz

  6. efsane dedi ki:

    https://www.hizliresim.com/5cna40

    admin bu sorunu çözemedim internette jobs menüsünden yapıyorlar ama o menü yok nasıl ekliyeceğimi de bulamadım

    https://forum.unity.com/threads/a-native-collection-has-not-been-disposed-enable-full-stacktraces-how.1043248/

    bu linkte jobs menüsü var bende yok nasıl ekleyebilirim bu sorunu basıl çözebilirim

    • yasirkula dedi ki:

      Kullandığınız bir plugin’den kaynaklı olabilir diye düşünüyorum. Jobs menüsü için Package Manager’dan Burst kurmanız lazım ama belki buna gerek kalmadan sorunun kaynağını tespit edebilirsiniz. Eğer bu sorunun ne zaman çıktığını biliyorsanız (mesela diyelim her sahne geçişinde kesin çıkıyorsa), oyunda kullandığınız plugin’leri geçici olarak tek tek silip hangi plugin’i silince sorunun çözüldüğüne bakabilirsiniz. Veya sorun editörde belli bir eylem yapınca ortaya çıkıyorsa, google’da o eylemi, bu hata mesajı ile birlikte İngilizce olarak aratabilirsiniz.

      • efsane dedi ki:

        çalıştırıyoum editörde sorun olmuyor herşey sorunsuz sonra editörden durdurup tekrar çalıştırınca bu hayatı alıyorum

      • yasirkula dedi ki:

        Package Manager’dan oyuna daha sonradan eklediğiniz paketler neler? Örneğin 2D SpriteShape paketini eklediniz mi?

      • efsane dedi ki:

        ekli de en son onu mu ekledim hatırlamıyorum kullanmadığın packetleri silmiştim en son

      • efsane dedi ki:

        bendeki unity sürümü 2021.1.6f1 ve package manager de güncelleme yok 2dspriteshape de ne yapmam lazım anlamadım siliyim mi?

      • efsane dedi ki:

        sprite shape sürümü 6.0.0 attığın linkteki sürümden yüksek gene aynı hata

      • yasirkula dedi ki:

        O zaman ondan değilmiş bilmiyorum.

      • efsane dedi ki:

        tmm sağol yine de silsem onu ne olur

      • efsane dedi ki:

        jobs menüsü ekledim ama nasıl kullanıcağımı anlamadım internette baktım ama anlamadım nasıl kullanıcam yığın izlemesini açtım ama nereye kaydediyor ne yapıyor anlamadım

      • yasirkula dedi ki:

        En başta attığın linkte ne yapmanı söylüyorsa onu yap sadece derim. Büyük ihtimalle hatayı neyin verdiğini konsola yazmaya yarıyordur bu değişiklik. Eğer 2D Sprite Shape kullanmıyorsan silebilirsin. Silince hata çıkmıyorsa sıkıntı olmaz heralde. Akabinde Unity’e restart atınca hata da çözülüyorsa Burst’ü tekrar silebilirsin.

      • efsane dedi ki:

        bişey fark ettim bütün sahnelere DontDestroyOnLoad eklemişim ondan olabilir mi

      • yasirkula dedi ki:

        Gerçekten bilmiyorum, bu sorun benim yardımcı olabileceğim bir sorun değil.

      • efsane dedi ki:

        tmm yine de teşekürler

      • efsane dedi ki:

        sorunu çözmeden build etsem play store yüklesem sorun olur mu

      • yasirkula dedi ki:

        Play Store’un oyunu reddetmesine sebep olmaz, sadece oyunun memory leak’ten dolayı uzun oynayışın ardından çökme riski olur. Ama bu sorunun sadece editöre has olması ihtimali de var, bazı hatalar oyunu build alınca gerçekleşmez. Öyleyse hiçbir sıkıntı olmaz.

      • efsane dedi ki:

        tmm sağol hayırlı bayramlar bu arada

      • yasirkula dedi ki:

        Teşekkürler hayırlı bayramlar.

      • efsane dedi ki:

        sa admin admob da Reklam ve İçerik Çakışması hatası alıyorum ama banner reklamını kaldırdım kodları sildim admobdan da kaldırdım sadece geçiş reklamı var ama yine de kabul etmiyor nasıl çözebilirim bunu

      • yasirkula dedi ki:

        Bu hatanın ney olduğunu bilmiyorum. Epey bir zaman önce de AdMob desteğimi tamamen kestim o yüzden AdMob sorunlarınızı AdMob ekibine veya başka birilerine sormanız lazım.

      • efsane dedi ki:

        admin internetten baktım ama anlamadım play console de eski sürümü nasıl kaldırabilirim son sürüm dışında diğerlerinin kalkmasını istiyorum admob daki hata bu yüzdenmiş eski sürümü kullanan olduğu için hatayı aldığımı söyledi biri

      • yasirkula dedi ki:

        Üretim-Sürümler’den en son sürümün bilgilerine bakınca orada “Tutulan uygulama paketleri ve APK’lar” daha önceki sürümlerden hâlâ yayımda olan APK’lardır. Orası boşsa herhalde eski APK’lar zaten yayımda değildir ama belki ben yanlış biliyorumdur.

      • efsane dedi ki:

        ben tekrar oynaya geçiş reklamı ekledim o sorun oluşturmaz dimi

      • yasirkula dedi ki:

        Genelde oraya koyuyorlar, ben de sorun oluşturmadığını ümit ediyorum.

      • efsane dedi ki:

        https://www.hizliresim.com/k4kby3m admin bu hataları çözdüm istersen söyliyim başkası sorarsa söylersin

      • yasirkula dedi ki:

        Söylersen faydalı olur, güzel olur.

      • efsane dedi ki:

        2. uyarının çözümü unity de export ediyorsun projeyi herhangi bir klasöre android studio ile açıyorsun gradle.scriptin içinde “—-proguard-unity.txt—-“içine bu kodu yapıştırıyorsun “-keepattributes LineNumberTable,SourceFile” bu kadar 3. uyarı için ise unity build settings de symob.zip var onu işaretliyorsun 2021.1.7f.1 de ise seçenekler var debugger seçtim ben onu play.console a abb yükledikten sonra 3 noktaya tıklayıp sembol yükle diyorsun symbol.zip i oraya yüklüyorsun biraz karmaşık oldu istersen resimli bir şekilde anlatabilirim

      • yasirkula dedi ki:

        Teşekkürler, resimli anlatıma benim için gerek yok. İhtiyaç duyan olursa bu mesaja yorum yazar.

      • efsane dedi ki:

        admin reklam çakışması aldıktan sonra düzeltim hatayı ama şimdi reklam gelmiyor Bundle Identifier değiştirince mobilde test edince reklam geliyor play console yüklenmiyor Bundle Identifier değiştirilebilir mi

      • yasirkula dedi ki:

        Play Store’a bir kere APK yükledikten sonra Bundle Identifier değiştirilemiyor; yeni bir uygulama oluşturmak gerekiyor.

      • efsane dedi ki:

        API’leri kullanmak için Play Oyun Hizmetleri SDK’sını üretim APK’nıza ekleyin chevron_right bunu nasıl yapıyoruz internette Play Oyun Hizmetleri SDK baktım ama bulamadım

        https://developers.google.com/games/services/android/quickstart#step_3_modify_your_code

        beni bu siteye yönlendirip duruyor nasıl yapıcağımı sdkyı nerden bulabilirim bulamadım

      • yasirkula dedi ki:

        Bunu nerede ne için söylüyor?

      • efsane dedi ki:

        https://www.hizliresim.com/ocaoq7f

        bunu yaptım bi bu eksik ama anlamadım nasıl yapıcağımı internette de bulamadım veya anlamadım

      • yasirkula dedi ki:

        Şu dokümantasyondaki tüm adımları takip etmendiysen ondan olabilir: https://github.com/playgameservices/play-games-plugin-for-unity

      • efsane dedi ki:

        hepsini yapamam çokmuş neyse kalsın o zaman teşekkürler admin

  7. disking dedi ki:

    Hocam merhabalar admob ile ilgili şöyle bir sorunum var. Oyunda bildiğiniz gibi Start a reklam isteği atmak için kodları yazıyoruz. Ben oyunumda kullanıcı yandığı zaman yani oyunu baştan başlatacağım zaman sahneyi baştan yüklüyorum bu da start kısmına yazdığımız kodu tekrar çalıştırıyor ve tekrar reklam isteği atıyor, yani kullanıcı 10 kere yeniden başlayıp 1 kere reklamı görüntüledi ise boşu boşuna 9 tane daha reklam isteği gitmiş oluyor ve istekler boş kalıyor bu da Google açısından sorun yaratıyor. Bunu çözmek için Dontdestroyonload komutunu kullandım bu reklam objesini sahne değişimlerinden koruyor fakat bu sefer de sahneyi tekrar yüklediği zaman sanırım önbellekten önceden yüklediği reklamı siliyor bu yüzden de göstermek istediğimde göstermiyor tekrar reklamı isteği atmam gerekiyor bu sefer de yine en baştaki soruna çıkıyor bunu nasıl çözebilirim?

    • yasirkula dedi ki:

      DontDestroyOnLoad yapacaksanız, Start fonksiyonunda reklam script’inin instance’ı zaten var mı diye bakıp varsa Destroy ile mevcut objeyi yok etmeniz lazım. Yoksa her sahne yeniden başladığında sahnedeki reklam script’i sayısı da 1 artar. Singleton reklam script’imde bu sıkıntı olmamalı.

      • disking dedi ki:

        dediğiniz şeyi anladım öncelikle objeyi bu obje mi diye kontrol edip sonradan oluşan objeleri yok ediyoruz kısaca Singleton kullanıyoruz onda sorun yok fakat dediğim gibi sahne yeniden yüklendiği zaman yüklenen reklamlar önbellekten muhtemelen siliniyor çünkü reklamlar açılmıyor bunu çözemedim tekrar tekrar istek atıp reklamı yüklersem sorun yok fakat dediğim gibi bu sağlıklı bir yol değil.

      • yasirkula dedi ki:

        Reklamlar sahneye bağlı değil. Siz reklamları bir yerde Destroy etmiyorsanız ve halihazırda reklam varken yeni reklam isteği ile mevcut reklamın üzerine yazmıyorsanız bu sorun olmaz. Dediğim gibi, singleton reklam script’imi inceleyebilirsiniz. Onda bu sorunun olduğunu sanmıyorum.

  8. efsane dedi ki:

    https://hizliresim.com/nfg24Z admin bu hatayı alıyorum bazı kullanıcılarımdan bende böyle bir hata yok ama nasıl çözebilirim minifity den r8 debug release yi açtım ondan olabilir mi

    • yasirkula dedi ki:

      Bana sormadan önce google araması yapmanı öneririm. ‘your hardware does not support this application failed to load libmain.so unity’ şeklinde arama yapınca karşıma gelen şu linke göre, Unity’nin son sürümlerinde bu sorun düzeltilmiş.

  9. aslan dedi ki:

    https://developer.android.com/studio/build/shrink-code#native-crash-support bunu nereye koysam kabul etmedi hangi gradle.builde koyucağımı anlamadım gradle.properties e koydum olmadı yardım eder misin

    • yasirkula dedi ki:

      Ben build’leri hep Unity’de alıyorum, Android Studio’da almıyorum. O yüzden Android Studio’da build adımları nasıl oluyor veya Gradle ayarları nereden nasıl yapılıyor bilmiyorum.

  10. mert dedi ki:

    sa admin bir konuda yardımın gerek oyunumda internetin açık olup olmadığını kontrol ettirmek istiyorum diyelim butona basınca internet veya mobil veri açıksa reklam girsin değilse direk geçsin

  11. efsane dedi ki:

    Sevgili Geliştiriciler, Aslan Oyun Studiosu’nda, Yakın zamanda yapılan bir incelemeden sonra, uygulamanız olan …(…) Uygulamanızın durumu ve sorunun nasıl düzeltileceği hakkında daha fazla bilgi için aşağıya bakın.
    Yayın Durumu
    Yayın durumu: Reddedildi
    Uygulamanız Google Play’e kabul edilmedi. Bu, mevcut uygulamanızın Google Play’deki durumunu etkilemez
    İhlal nedenleri
    Sürümlere göre uygunluk sorunları
    Sürüm (ler) Uygunluk Sorunu
    App Bundle: 1 APK GEÇERLİ GİZLİLİK POLİTİKASI GEREKTİRİR
    Uygulamanız, kullanıcıların Telefon Numarası bilgilerini, hem Play Developer Console’da belirtilen alanda hem de Play dağıtılmış uygulamasının içinden bir gizlilik politikası yayınlamadan Alipay SDK aracılığıyla yüklüyor.
    Uygulama Paketi: 1
    APK ÖNEMLİ AÇIKLAMA GEREKTİRİR
    Uygulamanızın, önemli ifşa yönergelerini karşılamadan Telefon Numarası bilgilerinin toplanmasını kolaylaştıran Alipay SDK veya kitaplığı kullandığını belirledik. Gerekirse, daha fazla bilgi için SDK sağlayıcılarınıza danışabilir veya lütfen SDK sürümünü 15.5.5 veya üstüne yükseltebilirsiniz.

    yardımcı olur musun admin

    • yasirkula dedi ki:

      Gizlilik poliçesi oluşturup orada Alipay SDK’sinin topladığı telefon bilgilerini nasıl kullandığından bahsetmeniz lazım (belki Alipay SDK’sinin kendi gizlilik poliçesine link atmak da işe yarıyordur bilmiyorum). Ardından bu poliçenin linkini hem oyunun Google Play sayfasındaki gizlilik poliçesi (privacy policy) linki kısmına, hem de oyunun içindeki menülerden birine eklemeniz gerekiyor. Akabinde güncelleme atabilirsiniz.

      • efsane dedi ki:

        teşekkürler admin bir şey daha sorucam çok soru sordum biliyorum ama alipay sdknin ne veri topladığını nasıl bulabilirim gizlilik politikası ücretsiz site kurarak orda yayinlasam olur mu

      • yasirkula dedi ki:

        Alipay’in kendi privacy policy’sinde bulabilirsin. Kendi gizlilik politikanı ücretsiz siteye koyabilirsin.

      • efsane dedi ki:

        admin image veya buton siteye yönelndirme yapsam olur mu politika ve image veya butona site yönlendirme nasıl yapılır

      • yasirkula dedi ki:

        Bence siteye yönlendirme yapabilirsin. Bunun için Application.OpenURL kullanabilirsin.

      • efsane dedi ki:

        Merhaba Google Play Geliştiricisi,
        Amaç Yeniden Yönlendirme
        Uygulamalarınız Intent Redirection’a karşı savunmasız.
        Bu sorunu çözmek için bu Google Yardım Merkezi makalesindeki adımları izleyin.

      • yasirkula dedi ki:

        Daha önce karşılaşmadığım bir hata, büyük ihtimalle kullandığınız plugin’lerden birinden kaynaklanıyor. “Unity Intent Redirection” araması yapmanızı öneririm.

      • efsane dedi ki:

        admin unity de oyunu imzalayıp export ediyorum sonra android studio da düzenleme yapıyorum build de generate signed builde de aynı şekil imzalıyorum ama bu sürüm imzalanmamış hatası veriyor

      • yasirkula dedi ki:

        Android Studio’da imzalamayı bilmiyorum.

      • efsane dedi ki:

        buldum admin gerek kalmadı teşekkürler

    • efsane dedi ki:

      sa admin bir şey sorucam butona bastıktan sonra reklam açılıyor reklamı kapattıktan sonra butonun işlevini yerine getirmesini nasıl sağlıyabilirim

  12. alperen dedi ki:

    https://hizliresim.com/BMWJGc

    sa bu sorunları nasıl düzeltebilirim

    • yasirkula dedi ki:

      Aleykümselam. İlk uyarı önemsiz duruyor. Diğerleri de oyunun çıkışını veya performansını etkilemez ama oyun çökerse, neden çöktüğünü bulmayı kolaylaştırır. Gerekli adımların ney olduğunu bilmiyorum ama “Daha Fazla Bilgi”den herhalde ne yapmanız gerektiğini bulabilirsiniz. İsterseniz gelen sayfaları İngilizce okuyup anahtar kelimeleri “unity” kelimesi ile birlikte google’da da arayabilirsiniz.

  13. MT dedi ki:

    Hocam emeğinize sağlık.
    Katkı olması için, şöyle bir yöntem de var:
    Binlerce resmi png yapma, hepsinde boyut değiştirme, hepsine filtre ekleme vb vb. tüm senaryoları, PhotoShop’ta Action oluşturarak yapmak mümkün. 2-5-10 aşamalı bir işlem bile olsa, 1 defa yapılanları action olarak kaydedip, sonra klasör/alt-klasörlerindeki tüm dosyalara bu action’ı uygulayabiliyoruz.

    • yasirkula dedi ki:

      Bazı Texture’larda alpha kanalının içeriği, RGB kanallarından çok farklı oluyor. Eğer Photoshop bu resimleri PNG’e çevirirken alpha kanalını herhangi bir şekilde bozmuyorsa bence de güzel bir yöntemmiş. “Save for Web” seçilirse oluşan PNG’lerin boyutu da eminim epey optimize olacaktır. Ama eğer Action’lar sadece belli uzantılara sahip resimleri png’e çevirmemize imkan vermiyorsa, yani jpeg gibi diğer uzantıları da png’e çeviriyorsa bu biraz sıkıntı olur.

Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Google fotoğrafı

Google hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.