Genişliği VEYA yüksekliği dolduran birlik UI karesi


11

Bu gereksinimleri olan bir tahta oluşturmaya çalışıyorum:

  • Kare olmalıdır.
  • Mevcut genişlik VEYA yüksekliğe sığmalıdır.
  • Tuvalde ortalanmalıdır.
  • Gerektiği kadar ek ara tuvallere sarılabilir.

Çapa ile oynuyorum ama bunu yapmak için herhangi bir kombinasyon bulamıyorum. Düşünebildiğim tek çözüm, konteynerin bir tür "OnResize" komut dosyasını ve programın boyutunu tahta olarak ayarlamaktır.

Bu orijinal düzen. (1) KurulCanvas'dır. (2) Kurul'dur.

Orijinal Mizanpaj

Ekran daha uzun olursa, kare büyür, ancak yine de kare olur:

resim açıklamasını buraya girin

Veya azaltır:

resim açıklamasını buraya girin

Ancak, bu önceki örnekler üst ve alt kenarlara yapışsa da, dikey alan mevcut genişlikten daha uzun olursa, karenin boyutunu sol ve sağ sınırlara bağlı olarak sınırlandırmasını istiyorum:

resim açıklamasını buraya girin

S1: Bunu çapa / pivotlarla yapmanın bir yolu var mı? BoardCanvas ve Board kendisi arasında ara tuvaller oluşturmak benim için uygun.

S2: Öyleyse, çapaları nereye yerleştirmeliyim? Ara nesnelere ihtiyacım var mı?

S3: Değilse, çözüm komut dosyası mı? Tuval üzerinde işlemek için OnResize var mı? Listede herhangi bir yeniden boyutlandırma etkinliği göremiyorum, ancak belki de nerede arayacağımı bilmiyorum. Her karede test etmenin biraz aşırı olduğunu, olay güdümünün daha iyi göründüğünü hissediyorum.

Teşekkürler!

Yanıtlar:


13

Sonunda (v5.0.0'da test edilmiş) bunu yapmanın bir yolunu buldum:

  • Yönlendirmeyi kontrol etmek için koda veya koşullara gerek yoktur.
  • Ölçeklerle hacklenmez ve referans çözünürlüğüne de gerek yoktur.

UI video derslerinde, metin belgelerinde iyi belgelenmiş olmasına rağmen, büyük bir kısmı eksik: "Otomatik düzenler" sistemi.

Otomatik düzenler, "düzenler" ve "düzen denetleyicileri" nden yapılmış mekanizmalardır. Yerleşim denetleyicileri, UI Oyun Nesnesine eklenebilecek bileşenlerdir. Kontrolörler Rect Transformakıllıca yeniden boyutlandırabilir .

Bazı denetleyiciler bileşenin uygulandığı nesneyi yeniden boyutlandırabilirken, diğer denetleyiciler bu nesnenin alt öğelerini yeniden boyutlandırabilir.

Birkaç yerleşik denetleyici var. Bunlardan biri Aspect Ratio Fitter.

İlk olarak, Boardpanelimi seçiyorum ve yeni bir Aspect Ratio Fitterbileşen ekliyorum :

resim açıklamasını buraya girin

Aspect Ratio FitterNesnenin aranan boy oranı "korumak" amacı görünüyor. Bunu yapmak için, nesne (en boy oranını korurken) bir alt nesnenin etrafına "sarmak" için ayarlanabilir ya da (en boy oranını korurken) kabını genişletmek ve sığdırmak için ayarlanabilir.

Daha sonra seçeneği seçiyorum Fit In Parentve istenen en boy oranını 1 olarak ayarlayarak mükemmel bir kare istediğimi belirtiyorum:

resim açıklamasını buraya girin

resim açıklamasını buraya girin

Bu, istediğimden çok benzer bir düzende ortaya çıkıyor, ancak panoya boyutlarını anlatmak zorunda kalmadım. Ama yine de, tasvir edildiği gibi kare olması gerektiğini biliyor:

resim açıklamasını buraya girin

Dikey olarak daraltırsam veya genişletirsem, kare, en boy oranını korurken üst öğeyi takip eder:

resim açıklamasını buraya girin

resim açıklamasını buraya girin

Büyülü olarak, değişiklik genişliği azaltarak donw olduğunda, "En Boy Oranı Tesisatçısı" bunu bizim için otomatik olarak yaptığı için eklenecek komut dosyası ve değiştirilecek özellik yoktur:

resim açıklamasını buraya girin

Orada marjı biraz istedik Son olarak, sadece bir konteyner rect o ara parçası olarak görür dönüşümü ve hareket yerleştirmek Boardgelen BoardCanvasiçine MarginCanvas:

resim açıklamasını buraya girin


Ah, harika, bu mükemmel bir çözüm gibi görünüyor. Bulduğuna sevindim, paylaştığın için teşekkürler!
Chris McFarland

3

Bu mümkündür, ancak ekranın yatay mı yoksa dikey mi olduğunu tanımlamak ve birkaç değeri değiştirmek için muhtemelen sadece küçük bir kod satırı veya iki satır.

Tuvalde, Tuval Ölçekleyicinin "Ui Ölçek Modu" nu "Ekran Boyutuyla Ölçeklendir" ve "Ekran Eşleştirme Modu" nu "Eşleşme Genişliği veya Yüksekliği" yapmalısınız:

resim açıklamasını buraya girin

800x600 varsayılan Referans Çözünürlük kullanılır varsayarsak, ve ekranın viewport varsayarak (örneğin manzara Screen.widthdaha büyüktür Screen.height, Maç kaydırıcı ihtiyacı olarak Yükseklik doğru tüm yol ayarlanacak) 1.

Daha sonra orta / orta çapa hazır ayarını kullanarak Tuval üzerinde bir Resim isteyeceksiniz. Ayrıca, Görüntünün Genişliği ve Yüksekliğinin Tuval Ölçekleyicinizin Referans Çözünürlüğünün Y değeriyle eşleşmesini de istersiniz.

resim açıklamasını buraya girin

Daha sonra kameranın görünüm penceresini yeniden boyutlandırabilir ve yüksekliğini görünüm penceresinin yüksekliğine uyacak şekilde uzatırken görüntünün şeklini koruduğunu görebilirsiniz:

resim açıklamasını buraya girin


Ekran dikey ise - ve muhtemelen gerektiği gibi kontrol etmek ve / veya değiştirmek için kodlamanız gerekecekse - Ölçekleyicinin Eşleşme değerini yapmanız 0ve Resminizin Yüksekliğini ve Genişliğini Referans Çözünürlüğüne uyacak şekilde değiştirmeniz gerekir. X değeri. (aşağıdaki resimlerde, Görüntünün Genişliği ve Yüksekliği her ikisi de 800)


İçine daha küçük bir görüntü sığdırmaya çalışıyorsanız, genişliğini ve yüksekliğini Referans Çözünürlük'ün X veya Y değerine (manzaraya veya resme bağlı olarak) göre ayarlayarak görüntüyü "ölçeklendirebilirsiniz". Örneğin, Referans Çözünürlüklerin X değerinin yarısını kullanan mavi bir kare yaptım (görünüm portu portre olduğu için) ve güzelce ölçekleniyor ve küçülüyor:

resim açıklamasını buraya girin

Ayrıca, bir dama tahtası veya başka bir şey istiyorsanız, her görüntünün X ve Y konumu ve Yüksekliği ve Genişliği, istediğinizi yapmak için Tuval Ölçekleyicinin Çözünürlük yüzdesine dayanabilir:

resim açıklamasını buraya girin


1
Son derece ayrıntılı cevabınız için teşekkürler Chris. Sonunda, yönlendirmeyi kontrol etmek için herhangi bir kod satırına ihtiyaç duymayan ve ölçeklerle hacklenmeyen ve bir referans çözünürlük kullanmayan bir çözüm buldum. Kendi cevabımı göndereceğim ama çabanıza ve resminize teşekkür etmeden geçmek istemedim.
Xavi Montero
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.