Unity Oyun İçi Dinamik Paneller (Sekme Destekli)

Yayınlandı: 05 Haziran 2018 yasirkula tarafından Oyun Tasarımı, UNITY 3D içinde

Merhabalar,

Bu derste, Unity oyunlarınıza nasıl dinamik UI panelleri ekleyebileceğinizi göstereceğim. Bu paneller, tıpkı editördeki paneller gibi, hareket ettirilebiliyor, yeniden boyutlandırılabiliyor ve diğer panellerin yanına sekme olarak atanabiliyor.

Asset Store: https://assetstore.unity.com/packages/tools/gui/dynamic-panels-114126

Alternatif link: https://github.com/yasirkula/UnityDynamicPanels/releases

WebGL demo: http://yasirkula.net/DynamicPanelsDemo/

Bu asset’i, Oyun İçi Debug Konsolu‘nu ve Oyun İçi Inspector‘u kullanarak oluşturduğum sahneden bir resmi aşağıda görebilirsiniz:

Detaylar için yazının devamını okuyabilirsiniz…

Öncelikle indirdiğiniz unitypackage‘ı Assets-Import Package yoluyla projenize import edin. Ardından UI paneller hangi objenin child’ı olsun istiyorsanız, o objeye Dynamic Panels Canvas component’i verin. Dilerseniz bu component’i direkt sahnenizdeki Canvas‘a da verebilirsiniz. Burada bilmeniz gereken bir nokta, Dynamic Panels Canvas component’ini hangi objeye verirseniz, panellerin hareket alanı o objenin RectTransform‘unun kapladığı alanla sınırlı olur. Yani eğer canvas’a verirseniz paneller canvas’ın tamamını kullanabilirken, canvas’ın sadece sol yarısını kaplayan bir RectTransform’a verirseniz paneller canvas’ın sağ yarısına dokunmazlar.

Editörden de aşina olabileceğiniz üzere, iki çeşit panel vardır: kenetlenmiş (docked) panel ve serbest panel. Bir paneli sekmesinden tutup diğer panellerin kenarlarına veya ekranın bir kenarına bırakınca, paneli oraya kenetlemek mümkündür. Bu şekilde kenetlenmiş paneller birlikte hareket ederler. Veya kenetlenmiş bir paneli sekmesinden tutup boş bir yere sürükleyince, o paneli serbest hale getirmek mümkündür. Bu durumda o panel, diğer panellerden bağımsız bir şekilde serbestçe hareket edebilir. Bu davranışlar oyun içi paneller için de geçerlidir.

Şimdi panelleri oluşturmaya başlayabiliriz. Bu sistemde paneller, oyun esnasında dinamik olarak oluşurlar. Bizim sadece Dynamic Panels Canvas component’inin Inspector‘undan, hangi UI objelerinin panele dönüşmesini istediğimizi söylememiz yeterli:

Burada 3 ana bölme karşımıza çıkıyor:

A) Properties

Minimum Free Space: Dynamic Panels Canvas’ın içerisinde daime panellerin kapatamayacağı bir boşluk vardır. Bu değer, boşluğun minimum boyutunu belirler. Bu kadar az boşluk kaldığında artık paneller bu boşluğu dolduracak şekilde yeniden boyutlanamazlar.

Panel Resizable Area Length: Panelleri yeniden boyutlandırmaya yarayan görünmez alanın boyutunu belirler. Bu alan ne kadar büyük olursa panelleri yeniden boyutlandırmak o kadar rahat olur.

Canvas Anchor Zone Length: Bir paneli sekmesinden tutup sürükleyerek Dynamic Panels Canvas’ın bir kenarına yaklaştırınca, paneli canvas’ın o kenarına kenetlemek (dock) mümkündür. Bu değer, paneli canvas’a ne kadar yaklaştırınca ona kenetlenebileceğimizi belirler.

Panel Anchor Zone Length: Bir paneli sekmesinden tutup sürükleyerek başka bir panelin bir kenarına yaklaştırınca, paneli o diğer panele kenetlemek mümkündür (eğer diğer panel halihazırda kenetli bir panel ise). Bu değer, paneli diğer panelin kenarına ne kadar yaklaştırınca ona kenetlenebileceğimizi belirler.

B) Free Panels

Oyunun başında serbest olmasını istediğiniz panelleri burada belirleyebilirsiniz. Add New butonuna basarak yeni bir serbest panel oluşturup ardından + butonuna tıklayarak bu panele sekmeler ekleyebilirsiniz. Her bir sekmenin 4 parametresi vardır:

Content: O sekme aktifken, panelin içerisinde hangi RectTransform‘un gösterileceğini belirler. Panel olmasını istediğiniz RectTransform’u buraya vermelisiniz.

Label/Icon: Sekmenin ismini ve (tercihen) ikonunu belirlemeye yarar.

Min Size (XY): Content‘in minimum boyutunu belirlemeye yarar. Paneli yeniden boyutlandırırken bu boyutun altına inilemez.

Mevcut bir serbest paneli silmek için, o panelin bir sekmesini seçin ve Remove Selected butonuna tıklayın.

C) Docked Panels

Oyunun başında kenetli olmasını istediğiniz panelleri burada belirleyebilirsiniz. “= Docked Panels =” başlığının altındaki büyük önizleme alanında yer alan bir bölmeye tıklayıp Dock new panel inside butonlarını kullanarak o bölmeye yeni bir panel kenetleyebilirsiniz. Ardından o panele sekmelerini vermeyi unutmayın. Dilerseniz Dock new panel to canvas butonlarını kullanarak direkt canvas’ın kenarlarına kenetli paneller de oluşturabilirsiniz.

Eğer bir noktada takılırsanız Plugins/DynamicPanels/DemoScene sahnesini açıp oradan kopya çekebilirsiniz. Şimdiye kadar demeyi unuttum ama demo sahnesinde de göreceğiniz üzere, dilerseniz aynı sahnede birden çok Dynamic Panels Canvas component’i bulundurabilirsiniz. Sürükle-bırak ile de panellere bu canvas’lar arasında geçiş yaptırabilirsiniz.

Bu dersin burada sonuna gelmiş bulunmaktayız. Sonraki dersimizde görüşmek üzere!

yorum
  1. crll dedi ki:

    Selamun aleyküm hocam. Müsadenizle bir şey soracaktım size. Ben Unity ‘de Play Mode ‘a geçerken Unity donup kalıyor. Ne yapabilirim sizce?

  2. sizik dedi ki:

    Selamun Aleyküm hocam. Unity ‘den build alamıyorum. Önccelikle;
    1 – Telefonumun bağlı olması gerekiyor mu pc’ye? Çünkü her denememde pc ‘ye telefonu takmadığım için hata veriyor.
    2 – Telefonu bağladığımda ise başka hatalar veriyor. Hatalar şu şekilde;

    Exception: Failed running C:\Program Files\Unity\Hub\Editor\2020.3.12f1\Editor\Data\il2cpp/build/BeeSettings/offline/bee.exe –useprebuiltbuildprogram –no-colors

    stdout:
    [ ] Require frontend run. tundra.dag no longer valid. FileSignature timestamp changed: il2cpp_settings.json
    [ 0s] Executed build program. Created build graph with 2 nodes.
    [ 0s] Freezing tundra.dag.json into .dag (.dag file didn’t exist)
    [0/2 0s] Il2Cpp C:/Users/carel/Desktop/Unity/İlkOyun/Library/Il2cppBuildCache/Android/armeabi-v7a/Native/armeabi-v7a/libil2cpp.so
    ##### CommandLine

    ##### ExitCode
    1
    ##### Output
    Failed to create output directory for targetfile C:\Users\carel\Desktop\Unity\İlkOyun\Library\Il2cppBuildCache\Android\armeabi-v7a\Native\armeabi-v7a\libil2cpp.so as part of preparing to actually running this node
    *** Bee build failed (0.05 seconds), 0 items updated, 2 evaluated
    stderr:

    • yasirkula dedi ki:

      Mesajlarınız spam’e düşmüş, bazen maalesef öyle oluyor.

      1- Build&Run yapıyorsanız telefon bağlı olmalı, sadece Build yaparken gerekmiyor.
      2- Büyük olasılıkla, klasör isminizin İlkOyun olmasından kaynaklı. Klasör isminde hiç Türkçe karakter (İ) kullanmamayı deneyin.

      • sizik dedi ki:

        Ya hocam valla Allah razı olsun 1 gün boyunca uğraştım. Sorun sizin de yardımınızla elhamdülillah çözüldü. 😀

  3. Bayram dedi ki:

    Hocam konuyla biraz alakasız ama kendim yapamadım bir türlü o yüzden sizden yardım almak istedim. Hocam oyunun ana menüsündeki play tuşuna basınca oyunu oynayan kişi kaçıncı levelde kaldıysa ordan devam edebilmesini nasıl yapabilirim?

    • yasirkula dedi ki:

      Öncelikle yeni bir levela geçince şu kod ile o levelı kaydedin:

      PlayerPrefs.SetInt(“KayitliLevel”, oyuncununKaldigiLevelinNumarasi);
      PlayerPrefs.Save();

      Play tuşuna basınca, şu kod ile kaçıncı levelda kaldığını bulup o levelı başlatabilirsiniz:

      int oyuncununKaldigiLevelinNumarasi = PlayerPrefs.GetInt(“KayitliLevel”, 0); // Eğer henüz kayıtlı level yoksa (mesela oyun ilk defa açıldıysa) 0 döndürür

      • Bayram dedi ki:

        hocam level geçince olacaklar ve play butonu kodları ayrı scripteler

      • yasirkula dedi ki:

        Dediğim kodları, kodların çalışmasını söylediğim yerlerde kullanınca sorun olmamalı.

      • Bayram dedi ki:

        hocam olmuyor bu verdiğiniz kodda

        PlayerPrefs.SetInt(“KayitliLevel”, oyuncununKaldigiLevelinNumarasi);
        PlayerPrefs.Save(); (burasını hata veriyor tanımlı bağlam yok diye)

        unity de aynı şeklide burayı hata olarak görüyor

      • yasirkula dedi ki:

        oyuncununKaldigiLevelinNumarasi kısmını, oyuncunun kaldığı level’in numarasını tutan bir değişken ile değiştirmeniz lazım. Diyelim oyuncu 3. leveldan 4. levela geçiş yapıyorsa, bu değişkeninizin değeri 4 olmalı (oyunu geri yüklerken 4. değil de 5. level’dan başlıyorsa, değeri 4-1=3 olmalı).

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 )

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.