Unity Çerez Ders: Projenizdeki Klon (Duplicate) Asset’leri Bulmak

Yayınlandı: 21 Aralık 2020 yasirkula tarafından Oyun Tasarımı, UNITY 3D içinde

Merhabalar,

Bir Unity projesinde birden çok kişi çalışıyorsanız, aynı asset’in projeye birden çok kez eklendiğine şahit olabilirsiniz. Bu da projenin boyutunun gereksiz yere büyümesine sebep olabilir. Projedeki hangi asset’lerin birbirinin klonu olduğunu bulabilmek için, basit bir editör script’i yazdım:

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

Ardından Window-Duplicate Asset Detector ile Duplicate Assets penceresini açıp Refresh butonuna tıklayabilirsiniz. Burada dikkat etmeniz gereken 3 nokta var:

  • Hangi asset’lerin birbirinin klonu olduğunu bulabilmek için, script her asset’in hash’ini çıkarıp bu hash’leri birbiri ile kıyaslıyor. Çok ender de olsa, farklı asset’lerde hash çakışması olabilir ve klon olmayan asset’ler klon gibi listelenebilir. İlaveten, script sadece hash’lere baktığı için, asset’lerin import ayarlarına bakmıyor. Bu duplicate asset’lerin import ayarlarını siz kendiniz kontrol etmeli ve hangi duplicate asset’lerin gereksiz olduğuna ona göre karar vermelisiniz.
  • Listelenen konumlardan birine çift tıklarsanız, o konumdaki asset otomatik olarak seçilir.
  • Duplicate asset’lerin önizlemelerinden birine tıklarsanız, o duplicate asset’lerin hepsi otomatik olarak seçilir.

Başka derslerde görüşmek üzere!

yorum
  1. kjhjhjhj dedi ki:

    Selamun aleyküm hocam. Projemi Build and Run yapmaya çalıştığımda “Exception: Failed running C:\Program Files\Unity\Hub\Editor\2020.3.12f1\Editor\Data\il2cpp/build/BeeSettings/offline/bee.exe –useprebuiltbuildprogram –no-colors”
    “Build completed with a result of ‘Failed’ in 57 seconds (57469 ms)
    UnityEditor.BuildPlayerWindow:BuildPlayerAndRun ()”
    “UnityEditor.BuildPlayerWindow+BuildMethodException: 2 errors
    at UnityEditor.BuildPlayerWindow+DefaultBuildMethods.BuildPlayer (UnityEditor.BuildPlayerOptions options) [0x002ca] in :0
    at UnityEditor.BuildPlayerWindow.CallBuildMethods (System.Boolean askForBuildLocation, UnityEditor.BuildOptions defaultBuildOptions) [0x00080] in :0
    UnityEditor.BuildPlayerWindow:BuildPlayerAndRun ()” hataları ile karşılaşıyorum. Ne yapabilirim?

  2. Barış dedi ki:

    (bu geçen yıl olan bir olay) Önceden bi asset kurmuştum sonra tekrar yanlışlıkla import dedim import paneli gelmişti cancel dememe rağmen proje boyutu baya şişmişti. Bunun sebebi ne olabilir acaba? (bu şimdi oldu) Şimdi de oyunumda hatayla bi prefabı sildim tekrar asseti import dedim sadece o prefab için ama acaba proje boyutu artmış mıdır bilmiyorum.

    Örneğin diyelim boş proje açtık oraya bir asset import edip sonra silsek bile sanırım hala boyutu biraz artmış kalıyor projenin?

    • yasirkula dedi ki:

      Bir asset’i import edip ardından import edilen her dosyayı silmenize rağmen proje klasörünün boyutu büyük gözüküyorsa, ya Temp ya da Library klasörünün boyutu artıyordur. Temp klasörü zaten projeyi kapatınca siliniyor. Library’i ise isterseniz elle silebilirsiniz ama bunu yapmak için bir sebep görmüyorum. Bu klasörlerin boyutunun artması, build alınan oyunun boyutunun artması anlamına gelmiyor.

  3. BAHADIR dedi ki:

    Hocam verdiğiniz cevaplar için çok minnettarım. Oyunum baya ilerlerdi. Birde arkadaşımın size bir sorusu var, Game Maker kullanıyor kendisi. Kayıt ve giriş sistemi yapmak istiyoruz. Örneğin altın ve tecrübe kazanımlarını oyuncular için kaydetmek istiyoruz bir nevi veri tabani gibi.

    https://hizliresim.com/BqtR4p
    https://hizliresim.com/NKb4Kp

    Resim örneklerindeki gibi hocam bir nevi online oyun gibi diyelim. Bir kaynak yada bunun üstüne dersiniz var mı hocam acaba ?

    Teşekkürler 🙂

    • yasirkula dedi ki:

      Maalesef artık Game Maker kullanmayı bilmiyorum, son kullanmamın üzerinden çok uzun zaman geçti ve bu esnada Game Maker’la alakalı dokümanlara bakmayı da kestim. Bu konuda yardımcı olamayacağım.

  4. Bahattinos dedi ki:

    Hocam merhabalar..

    CS1503 2 bağımsız değişkeni: ‘yöntem grubu’ öğesinden ‘ServerHandleData.Packet’ öğesine dönüştürülemiyor 18 hatası alıyorum kodum aşağıda sizce sorun nedir ?
    public delegate void Packet(int connectionID, byte[] data);

    Hatayı aldığım satır :
    packets.Add((int)ClientPackets.CMerhabaServer, DataReceiver.HandleMerhabaServer);

    • yasirkula dedi ki:

      DataReceiver.HandleMerhabaServer’ın parametrelerinin int ve byte[] olmamasından kaynaklı gibi duruyor.

      • BAHADIR dedi ki:

        Hocam gene kapınızdayım . yüzdüm yüzdüm kuyruğuna geldim….
        Her şey hazır login yapmaya çalışıyorum gameserverda böyle bir hata oluşuyor.

        Unable to cast object of type ‘System.DBNull’ to type ‘System.Single’ ]

        Giriş yapamıyorum, aynı zamanda bu hata yüzünden veritabanına kayıt işlemide göndermiyor ne yapmam lazım bir türlü çözemedim. Kullandığım game server numaan diye bir arkadaşa ait

        Fotoğraf : https://hizliresim.com/VFcDSG

      • yasirkula dedi ki:

        “OnReceiveData HATA”nın hangi satırdan çıktığını bulup orada hangi değeri (float)’a çevirmeye çalıştığınıza bakmalısınız. O satırda hata veriyordur. Ama bu hatanın kaynağını en iyi Numan tespit edebilir.

  5. BAHADIR dedi ki:

    hocam size bir soru sormak istiyorum…

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;

    public class KameraKontrol : MonoBehaviour
    {
    public GameObject Sphere;
    public float panSpeed = 20f;
    public Vector2 panLimit;
    Vector3 mesafe;

    void Start()
    {
    mesafe=transform.position – Sphere.transform.position;
    }

    void Update()
    {

    Vector3 pos = transform.position;

    if (Input.GetKey(“w”))
    {
    pos.z += panSpeed * Time.deltaTime;
    }
    if (Input.GetKey(“s”))
    {
    pos.z -= panSpeed * Time.deltaTime;
    }
    if (Input.GetKey(“d”))
    {
    pos.x += panSpeed * Time.deltaTime;
    }
    if (Input.GetKey(“a”))
    {
    pos.x -= panSpeed * Time.deltaTime;
    }

    pos.x = Mathf.Clamp(pos.x, -panLimit.x, panLimit.x);
    pos.z = Mathf.Clamp(pos.z, -panLimit.y, panLimit.y);

    transform.position = pos;

    transform.position=Sphere.transform.position + mesafe;

    }
    }

    BÖYLE BİR KODUM VAR KAMERANIN İÇİNE ATIYORUM KAMERAYI SORUNSUZ TAKİP EDİYOR LAKİN KAMERAYI TAKİP EDERKEN BEN W,A,S,D TUSLARI İLE HARİTAYI İNCELEYİP GEMİYİ KATİP EDEN KAMERAYA GERİ DÖNMEK İSTİYORUM. GERİ DÖNMEK İÇİNDE BİR BUTON VB. NESNE TANIMLAMAM LAZIM NASIL YAPARIM HOCAM KOD HATASIZ SUAN LAKİN W.A.S.D HAREKET ETMIYOR ( OYUN SEAFİGHT TARZI )

    • yasirkula dedi ki:

      bool haritaModu = false; oluşturun, WASD tuşlarına basınca bunu true yapın, haritayı gemiye geri odaklama tuşunuza basınca false yapın. Bu değişken true ise “transform.position=Sphere.transform.position + mesafe;” kodunuzu çalıştırmayın.

      • BAHADIR dedi ki:

        hocam tam olarak anlayamadım kodu tamamlayıp atma şansın var mı acaba sizide uğraştırıyorum ama

      • yasirkula dedi ki:

        private bool haritaModu = false;

        void Update()
        {
        if(WASD basıldıysa)
        haritaModu = true;

        if(Gemiye geri dönmek için bir buton basıldıysa)
        haritaModu = false;

        if(!haritaModu)
        transform.position=Sphere.transform.position + mesafe;
        }

      • BAHADIR dedi ki:

        hocam tesekkur ederim çok birde son sorum olarak burada kafam çok karıstı. Photon 2 ile yazdığım için 2 kişi oyuna gşrşnce kameraların karısmaması için karakteri prefab alıp tikini kapatıp sahneden siliyorum. Oyuna girince klonlayıp 2 karakterde yan yana geliyor kameralar karışmıyor. Lakin kamerayı prefabın içine atıp kaydettiğim verdiğiniz kodları eksiksiz yazdım calısıypor. Ama ben kameranın gemiyi takip etmesini istiyorum. Gemiyi sağa sola çevirince kamerada sağa sola dönüyor kameranın sabit kalmasını nasıl sağlarım. Gemiyi takip edecek ama kamera sağa sola dönmeyecek gemi döndüğü zaman. Kamerayı karakterin içine attıgım için dönüyor eğer cıkartırsam oyuna girince kamera aktif olmuyor bu problemi nasıl cozebilirim

      • yasirkula dedi ki:

        Kamerayı oyun başladığında karakterin içinden çıkarsanız? Yani mesela karakterin Start fonksiyonunda kamera.transform.SetParent(null); fonksiyonu ile. Ama sadece mevcut oyuncunun kamerasını dışarı çıkarmanız lazım, diğer oyuncularınkini değil.

  6. Ahmet dedi ki:

    Hocam burası alakasız bir konu ama nerede soracağımı bulamadım. kusura bakmayın. Visual studioya Nuget Paket yöneticisi ile bir kütüphane indirdim ama bunu unity ile iliştiremiyorum unity aşağıdaki hatayı veriyor. Nasıl düzeltebilirim?

    “”The type or namespace name could not be found. Are you missing a using directive or an assembly reference?””

    • yasirkula dedi ki:

      Maalesef Nuget ile hiç uğraşım olmadığından bilemiyorum. Unity’de kullanmak için bir paket indirdiyseniz, Unity Nuget desteklemiyor olabilir.

      • Ahmet dedi ki:

        Hocam alta attığım kısımda “Keycode.A” yerine unity arayüzünden UI buton eklemek istiyorum.Yani klavyeden girilen A tuşu yerine sahnedeki buton ile çalışacak. Nasıl yapabilirim?

        var dirs = new[] { (x – 1, y, hwalls, x, y, Vector3.right, 90, KeyCode.A), };

      • yasirkula dedi ki:

        O KeyCode’u Input.GetKey ile çağırıyor idiyseniz, onu SimpleInput.GetKey ile değiştirip SimpleInput plugin’imi projenize ekleyebilirsiniz: https://yasirkula.com/2017/07/19/unity-gelismis-input-sistemi-mobil-destekli/. Ardından UI butonunuza Key Input UI component’i ekleyip Key’ini A tuşu ile değiştirmeniz yeterli.

  7. Ali dedi ki:

    Merhaba,
    Benim unityde bir haritam var fakat bu haritada çok fazla obje var çok detaylı ağaçlar, evler, yollar milyonlarca obje var bunlar aktif olarak kullanılmıyor sadece görüntü olarak kalacak. Bu kadar objeyi yaptım ama bu sefer bilgisayarım kasılıyor çok fazla obje yüzünden oyun yazılamaz hale geldi, unity kullanılamaz hale geldi donuyor büyük ihtimal build alıncada apk sıkıntılı olacak. Böyle durumlarda çözüm öneriniz nedir? Lütfen yardımınız lazım

  8. Igrahiga dedi ki:

    Merhaaba Yasir! Discord uzerinde hesab’in varmi ? Eger discord’a giriyorsan bi soyle cok sevinirim.

  9. aslanadam dedi ki:

    google playe oyun yüklemek için hesap açıyorun 25 dolar ödüyoruz ya bunun dolar olmasına gerek var mı yoksa hesaptan 25 dolara karşılık gelcek kadar tl mi çekiyor yardım edersen sevinirim

  10. aslanadam dedi ki:

    [Adaptive Performance] No Provider was configured for use. Make sure you added at least one Provider in the Adaptive Performance Settings. UnityEngine.AdaptivePerformance.AdaptivePerformanceInitializer:Initialize () (at Library/PackageCache/com.unity.adaptiveperformance@2.0.2/Runtime/Core/AdaptivePerformanceInit.cs:51)

    [Uyarlanabilir Performans] Kullanım için hiçbir Sağlayıcı yapılandırılmadı. Uyarlanabilir Performans Ayarlarına en az bir Sağlayıcı eklediğinizden emin olun. UnityEngine.AdaptivePerformance.AdaptivePerformanceInitializer: Initialize () (at Library/PackageCache/com.unity.adaptiveperformance@2.0.2/Runtime/Core/AdaptivePerformanceInit.cs: 51)

    Değerli hocam uyarlanabilir performan sağlayıcı nasıl ekleyebilirim unity mobile

  11. ferhat dedi ki:

    Merhaba Yasir bey, seviyeli bir zeka testi oyunum var, alt taraftaki 4 butonu bir panel içerisinde prefab yaptım ve her sahneye ekledim örneğin 1 den 50.sahneye kadar. Kullanıcı bir seviye atladığında Gecis isimli bir sahneye alınıyor ve daha sonra bir sonraki seviyeye geciliyor, buraya kadar sorun yok yalnız, ben bu alttaki buton prefablerinde linq işlemleri felan yapıyorum,butona dokunduğunda soruyla ilgili ipucuları gösteriyor felan, gecis ekranına gittiğimde benim bu prefablerin yok olmadığını fark ettim, OnlevelWasLoaded kullandım fayda etmedi, bir öneriniz varmı acaba? şimdiden teşekkür ederim.

    • yasirkula dedi ki:

      DontDestroyOnLoad yapmadığınız sürece yok olur. Gördüğünüz şey yeni sahnedeki prefab’dır.

      • ferhat dedi ki:

        Aslında sorunu buldum, bu prefabin icerisinde reklam scripti var, video reklam bu. Her sahne degistiginde, 40,50 mb ram artiyor. Anlamis değilim çözümü de bulamadım. Muhtemelen her seviye arttiginda hafizada tutuyor ve yok etmiyor, ne yapabilirim bu konuda?

      • yasirkula dedi ki:

        Eğer AdMob ise, AdMob dersimde reklamları Destroy ile yok etmekten özellikle bahsettim.

  12. Samet dedi ki:

    Hocam konuyla alakasız fakat nereye yazacağımı bilemedim kusura bakmayın. Bir sorum var bu resimde gördüğünüz gibi 2 adet panel var menü olarak kullanıyorum. Biri açılırken animasyonlu bir şekilde diğer panel tuşuna tıklarsam üst üste açılıyor. Acaba iki tuşa bastığımızda da üst üste açılabilirliğini nasıl engelleriz yani biri açılırken diğerinin butonuna basınca önceki işlem iptal olsun. Denedim birkaç şey fakat yapamadım. Umarım anlatabilmişimdir hocam.

    • yasirkula dedi ki:

      A panelinin tuşuna basınca B panelini SetActive(false) yapsanız, B panelinin tuşuna basınca da A panelini SetActive(false) yapsanız olmaz mı? Objelerin hep aktif olması gerekiyorsa, A panelinin tuşuna basınca BPaneli.GetComponent<Animator>().Play("PanelKapamaAnimasyonu",0,1f); yapmayı deneyebilirsiniz.

  13. alp dedi ki:

    Sayın hocam ıenumeratorün içinde butona basılıp basılmadığını kontrol ettirmek mümkün mü

    • yasirkula dedi ki:

      Butona basınca çağrılan bir fonksiyon, bir değişkeni true yapar. Coroutine’in içerisinde bu değer false olduğu sürece (while(!degiskenDeger) iken) yield return null; çalışır.

      • alp dedi ki:

        Değerli hocam android de ıenumerator kodu olan sahneye geçiş yapmıyor donuyor oyun durdu diyor mobile desteklemiyor mu bu kod ıenumerator de yükleme ekranı yapıyorum

      • yasirkula dedi ki:

        IEnumerator’un oyunu çökerttiğini daha önce duymadım o yüzden bence IEnumerator’dan değildir.

      • alp dedi ki:

        ienumerator yüzünden olmuyor donuyor sahne yüklemiyor boş sahne oluşturdum denedim mobilde sahneyi yükleme ve geçiş yapmadı dondu kaldı arka planda yükleme yapmıyor starcourt start methodunda olunca geçmiyor butona yazıyorum gene butona basınca donuyor kalıyor ben yanlış bir şey mi yapıyorum bilmiyorum kodu atsam bi bakar mısın ienumeratorun

      • alp dedi ki:

        bide oyun 2d fark eder mi

      • yasirkula dedi ki:

        Fark etmez. Oyundaki her sahnenin File-Build Settings’teki listeye ekli olması lazım belki onu unutmuşsundur. Aksi taktirde kodun ilgili kısmını buraya atabilirsin.

      • alp dedi ki:

        IEnumerator LoadScene()
        {

        AsyncOperation asyncOperation = SceneManager.LoadSceneAsync(3);

        asyncOperation.allowSceneActivation = false;
        while(!btn)
        {
        yield return null;
        }
        while(btn)
        {
        asyncOperation.allowSceneActivation = true;

        }
        yield return null;

        } sade yükleme sahnesini çıkardım onun dışında hepsi ekli

      • yasirkula dedi ki:

        while(btn) satırı infinite loop’a sebep oluyor. Orada while’a gerek yok sanki, o while silinebilir.

      • alp dedi ki:

        https://hizliresim.com/SWnvL1
        https://hizliresim.com/RAsOEo
        böyle hata veriyor dondu oyun sahneden dolayı mı kodlardan dolayı mı neden olduğunu bulabileceğim bir yöntem var mı

      • yasirkula dedi ki:

        Resim linkleri çalışmıyor. Kodun son halini merak ettim. Unity’nin neden donduğunu bulmanın kolay yolu var mı bilmiyorum. Belki Visual Studio ile Unity’i birbirine bağlayıp Unity donmadan hemen önce çalışan koda breakpoint koyup sonra adım adım kodun nereye gittiğini takip etmek işe yarar ama benim bu şekilde debug etme konusunda tecrübem yok.

      • alp dedi ki:

        https://imgyukle.com/i/aLdbE6
        https://imgyukle.com/i/aLdMlx
        peki internet te nasıl araştıramam lazım kodun nereye kadar çalıştığını bulmak için

      • yasirkula dedi ki:

        Hata mesajı yeterince açık aslında: settingManaGer1.json dosyası bulunamadı diyor.

    • alp dedi ki:

      peki butona bastığımda nasıl true yapıcam ben

    • alp dedi ki:

      build settingsteki bir ayar buna neden olabilir mi

      • yasirkula dedi ki:

        Hayır bu Unity’nin bir hatası değil. Ya senin yazdığın bir kod ya da kullandığın bir plugin’deki bir kod settingManaGer1.json diye bir dosyaya erişmeye çalışıyor ama böyle bir dosya yok. Dosyanın olup olmadığını File.Exists ile kontrol edebilirsin.

      • alp dedi ki:

        mobile build edince öle oluyor o sorun değilmiş bana unity sahnesini denetleme şansım var mı neden çöktüğüne bulmama yardımcı olucak program veya başka bir şey

      • yasirkula dedi ki:

        logcat log’larına bakmak dışında bilgim yok. Oyunu build alırken Development Build açık olursa log’lar daha çok bilgi verebilir. Bir başka yöntem de oyun crash olduğu esnada çalışan kodları satır satır comment’leyip hangi satırın oyunu crash’lettiğini bulmaya çalışmak.

      • alp dedi ki:

        test runner yaptım all test(s) succeeded diyor hata yok herşey sorunsuz diyor ama sıkıntı var nasıl bulucam artık

      • alp dedi ki:

        https://imgyukle.com/i/aOP68v hatalar bunlarmış

      • yasirkula dedi ki:

        Test Runner için import ettiğin dosyaları silince bu düzelir.

  14. metkam dedi ki:

    Konuyla alakasız ama unity3d script arşivini düzenleyebilir misiniz? Gerçekten çok güzel kaynak ama düzenlerseniz daha iyi olacaktır. Javascript kodları var ve invokerepeat kodu yok, bunları yaparsanız daha iyi olacağına inanıyorum, teşekkürler.

    • yasirkula dedi ki:

      Düzenledim teşekkürler.

      • metkam dedi ki:

        Ben teşekkür ederim çok güzel işler yapıyorsunuz, bir de eliniz değmişken türkçe youtube kaynakları da düzenler misiniz:D Kapanmış kanallar ve en son 5 yıl önce video atmış kanallar var da, yani siz bilirsiniz tabii

      • yasirkula dedi ki:

        Bazen kanalları kontrol edip kapanmış olanları listeden çıkarıyorum ama aktif olmayan kanalları genelde silmek yerine listenin altına taşıyorum.

  15. oyuncu dedi ki:

    https://hizliresim.com/v0G8fA

    https://hizliresim.com/MLVV8q

    Saygıdeğer hocam bunların çözümü var mı kardeşimin telefonunda bir sorun olmuyor benim telefonda bunlar çıkıyor benim telefon gm5 plus kardeşimin huwaei p30 lite

    • yasirkula dedi ki:

      Daha önce denk gelmedim. “unity il2cpp null pointer dereference android crash” şeklinde arama yapmanı öneririm.

      • oyuncu dedi ki:

        ramden olabilir mi benim 3 kardeşimin 4 gb rami var telefonda

      • yasirkula dedi ki:

        “Null pointer dereference” bana RAM’i andırmadı, sanmıyorum. Belki Unity sürümünden de olabilir, ileriki Unity sürümlerinde hata çözülmüş olabilir. Ama öncelikle google’da yazanlara bakman lazım.

      • efsane dedi ki:

        Sayın hocam oyunumda ana menude 3 buton var oyunu başlat,ayarlar,oyundan çık oyunu başlat deyince donuyor herşey sonra yükleme ekranına geçiyor bunu nasıl çözebilirim donma problemini

      • yasirkula dedi ki:

        Bana aynı şeyi 3 kere sorarak boşuna vakit kaybediyorsun çünkü bilmediğim bir konuda yardımcı olamam. Hata mesajını google’da aratmalısın ve Unity sürümünü güncellemenin bir etkisi oluyor mu kontrol etmelisin.

      • oyuncu dedi ki:

        sorunu buldum hocam 100 mb mp3 müzik vardı onu 18 mb düşürdüm sorun kalktı aynı hataya karşılaşan olursa söylersin projede mobilde yüksek mb şeyler kullanmasınlar

kjhjhjhj için bir cevap yazın Cevabı iptal et

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 )

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.