Unity otomatik hizalama yapma

DtEray

Hectopat
Katılım
30 Temmuz 2019
Mesajlar
116
Çözümler
4
Arkadaşlar merhaba unity'de esnek bir yapı hazırlamak istiyorum. Ama neyi nasıl araştıracağımı bilemedim. Epey araştırdım ama sonuç alamadım.
Yapmak istediğim şeyi şöyle resimde anlatayım.
1 tane panelim var diyelim. Bu panelin içinde 2 tane buton var. Bu butonların panelin orta kısmında sıralanmasını istiyorum. Ben panele 1 tane daha buton eklediğim zaman resmindeki gibi otomatik hizalansın. Bunu nasıl yapabilirim? Yardımlarınız için şimdiden teşekkürler. 🙏

anlatim.jpg
 
Butonları listede tutup her buton eklendiğinde öncekilerin pozisyonlarını kaydırabilirsin.

Ancak bunlarla uğraşmak yerine en güzel yöntem, tüm butonları içine ekleyip aktifliklerini kapatmak. Ve buton ekleyeceğin sırada eklenecek olanı aktif yapmak. Böylece pozisyon işleriyle de uğraşmana gerek kalmaz
 
Butonları listede tutup her buton eklendiğinde öncekilerin pozisyonlarını kaydırabilirsin.

Ancak bunlarla uğraşmak yerine en güzel yöntem, tüm butonları içine ekleyip aktifliklerini kapatmak. Ve buton ekleyeceğin sırada eklenecek olanı aktif yapmak. Böylece pozisyon işleriyle de uğraşmana gerek kalmaz
Cevap için teşekkürler. Aynı pozisyonda pasif veya aktif olduklarında çok yer kaplıyor ve estetik olarak güzel gözükmüyor. Keşke otomatik olarak bunları hizalasa 😕

Arkadaşlar butonu image'in içine attım. İmage'in sol duvarından uzaklığını hangi kod ile bulabilirim. Resimdeki 2 numaralı uzaklığı istiyorum. 1 numaralı ekran uzaklığını buluyorum ama 2 numarayı bulamıyorum. Cevaplar için şimdiden teşekkürler.


anlatim2.jpg
 
Son düzenleme:
Cevap için teşekkürler. Aynı pozisyonda pasif veya aktif olduklarında çok yer kaplıyor ve estetik olarak güzel gözükmüyor. Keşke otomatik olarak bunları hizalasa 😕

Arkadaşlar butonu image'in içine attım. İmage'in sol duvarından uzaklığını hangi kod ile bulabilirim. Resimdeki 2 numaralı uzaklığı istiyorum. 1 numaralı ekran uzaklığını buluyorum ama 2 numarayı bulamıyorum. Cevaplar için şimdiden teşekkürler.


Eki Görüntüle 1559572
2 numaralı uzaklığı bulmak için tam o çizginin olduğu yere boş bir gameObject oluşturup onun localpositionx değerini baz alabilirsiniz
 
public List<GameObject> Obj = new List<GameObject>();
public GameObject Pos1,Pos2;
float LineX,newX,start;
int S;
void Awake()
{
Obj.Add(Pos1);
foreach(GameObject fooObj in GameObject.FindGameObjectsWithTag("Obj")) {
Obj.Add(fooObj);
}
start = Pos1.transform.position.x;
Sorter(S);
}
private void Sorter(int a)
{
LineX = Mathf.Abs(LineX = (Pos1.transform.position.x - Pos2.transform.position.x));
for(int i=0; i<Obj.Count; i++)
{
newX = start +(LineX / Obj.Count)*i;
Obj.transform.position = new Vector3(newX,Pos1.transform.position.y,transform.position.z);
}

Pos1 i creat empty yap ve çerçevenin en soluna bırak. Pos2 aynı şekilde sağ tarafa gelecek.


Not: En son satırdaki Obj den sonra köşeli parantez içinde i gelecek. Neden bilmiyorum forum yazmama izin vermiyor :D
 
Son düzenleme:
public List<GameObject> Obj = new List<GameObject>();
public GameObject Pos1,Pos2;
float LineX,newX,start;
int S;
void Awake()
{
Obj.Add(Pos1);
foreach(GameObject fooObj in GameObject.FindGameObjectsWithTag("Obj")) {
Obj.Add(fooObj);
}
start = Pos1.transform.position.x;
Sorter(S);
}
private void Sorter(int a)
{
LineX = Mathf.Abs(LineX = (Pos1.transform.position.x - Pos2.transform.position.x));
for(int i=0; i<Obj.Count; i++)
{
newX = start +(LineX / Obj.Count)*i;
Obj.transform.position = new Vector3(newX,Pos1.transform.position.y,transform.position.z);
}

Pos1 i creat empty yap ve çerçevenin en soluna bırak. Pos2 aynı şekilde sağ tarafa gelecek.


Not: En son satırdaki Obj den sonra köşeli parantez içinde i gelecek. Neden bilmiyorum forum yazmama izin vermiyor :D
Cevap için çok teşekkür ederim. Deneyeceğim 😊
 
1667481885435.png


Kod yazmana gerek yok, Horizontal layout group işini görür. Ekstra olarak content size filter da kullanabilirsin.
 

Technopat Haberler

Yeni konular

Geri
Yukarı