eyd

Yeni üye
20 Ağu 2015
17
1
0
(34) İstanbul Avrupa
Merhaba arkadaşlar.Aşağıda mevcut ekran görüntülerini göreceksiniz.Öncelikle döngüye alarak Construction kısmında Add Instance ile istediğim kadar component oluşturabiliyorum.Daha sonra internetten çektiğim .json datasını sıralı halde diziye aktarıp, ekrana yazdırabiliyorum.Amacım bu datadaki verilere uygun bir component yerleşimi yapmak.Aslında bunu da yaptım, fakat tekli halde ve biraz karışık.Tek bir componente etki ediyor.Aynı içeriği döngüsel hale getirmek istiyorum fakat tek bir componenti çoğaltıp, her birini gelen dataya göre yerleştirme kısmı nasıl gerçekleştirilebilir?

R0VaJo.png

vbL0gD.png


Durumu daha iyi açıklayabilmek için bu videodaki gibi yapabiliyorum.Tek istediğim her bir oluşturulan bileşeni(component) random değilde girdiğim datadaki verilere göre yerleşmesidir.Veri çekme kısmınıda hallediyorum.Fakat çoklu bileşenlerde döngüyü bir türlü yapamadım.

[align=center]
Bu içeriği görmek için üçüncü parti çerezlerine izin vermeniz gerekli.
Daha fazla detay için çerezler sayfasını ziyaret edin.
 
Anladığım kadarıyla objelerin random değil de senin belirlediğin noktalarda oluşmasını istiyorsun. Doğru anladıysam eğer: Yerleştirmek istediğin yerin location bilgilerini array içine topla ve bunu döngü ile sırasıyla kullan.

Açıkçası bu öneriyi videodan yola çıkarak yazdım. Resimler bana pek fazla bir fikir vermedi. Konuyu doğru anlamışsam, istemen halinde detay verebilirim.
 
hydrogenx' Alıntı:
Anladığım kadarıyla objelerin random değil de senin belirlediğin noktalarda oluşmasını istiyorsun. Doğru anladıysam eğer: Yerleştirmek istediğin yerin location bilgilerini array içine topla ve bunu döngü ile sırasıyla kullan.

Açıkçası bu öneriyi videodan yola çıkarak yazdım. Resimler bana pek fazla bir fikir vermedi. Konuyu doğru anlamışsam, istemen halinde detay verebilirim.

Evet hocam doğru anlamışsınız.Location bilgilerini index sırasına göre aktarmayı planlıyorum.Ben "Apply Url" ile değerleri ayrı field nameler halinde .json dosyasından çekiyorum.Elde ettiğim x,y,z ve hatta scale değerini oluşturduğum aktörü çoğaltıp(dizide kaç eleman varsa o kadar çoğaltmak gerekiyor), index sırasını takiben location değerlerine göre yerleştirmeyi planlıyorum.Biraz karışık oldu ama umarım asıl çözmek istediğim sorunu aktarabilmişimdir.
 
Şöyle bir örnek verebilirim.

Örnek olarak oluşturduğum "Veri dizini" içinde kaç tane dizin varsa o kadar tekrar etmesi için "Length" nodunu bağladım. Ve her loop edişinde dizindeki o an tekrar eden veri hangisiyse onun location ve scale değerinin çağırmasını sağladım. Bu şekilde loop eden her objenin tek tek bilgilerine erişmek mümkündür.

Eğer veri dizinindeki bilgiler elle değil sonradan otomatik olarak eklenmesi gerekiyorsa, "Add" ile otomatik olarak dizine eklenebilir. Tabi bunlar geçicidir. Yani oyun durdurulursa bu veriler silinir (Save yapılmazsa tabi.)

GB5EpZ.png


Tabi ForLoop yerine ForEachLoop kullanarak doğrudan dizine bağlanabilir de. Bu sefer get veya Lenght gibi nodlara ihiyaç kalmaz. Bu daha basittir. Artık hangisini kullanırsan :) 
9QER28.png


Yukarıda verdiğim örnekler genel mantığını gösteriyor. Kendi ihtiyacına göre kullanımda değişebilir tabi. Takıldığın nokta olursa daha detaylı olarak inceleriz. Forumda kaliteli sorulara her zaman ihtiyaç var :)
 
hydrogenx' Alıntı:
Örnek olarak oluşturduğum "Veri dizini" içinde kaç tane dizin varsa o kadar tekrar etmesi için "Length" nodunu bağladım. Ve her loop edişinde dizindeki o an tekrar eden veri hangisiyse onun location ve scale değerinin çağırmasını sağladım. Bu şekilde loop eden her objenin tek tek bilgilerine erişmek mümkündür.

Eğer veri dizinindeki bilgiler elle değil sonradan otomatik olarak eklenmesi gerekiyorsa, "Add" ile otomatik olarak dizine eklenebilir. Tabi bunlar geçicidir. Yani oyun durdurulursa bu veriler silinir (Save yapılmazsa tabi.)

Tabi ForLoop yerine ForEachLoop kullanarak doğrudan dizine bağlanabilir de. Bu sefer get veya Lenght gibi nodlara ihiyaç kalmaz. Bu daha basittir. Artık hangisini kullanırsan :)

Hocam teşekkür ederim, ben vector yardımıyla yapmaya çalışıyordum.Bu şekilde göstermeniz ve detaylıca anlatmanız kafa karışıklığımı giderdi ve transform şeklinde yapmayı başardım. :)

hydrogenx' Alıntı:
Forumda kaliteli sorulara her zaman ihtiyaç var :)

Bu arada mesaj da çok ince.. :) Muhtemelen araştırma kültürüne tam hakim olmamakla ( neyi nerde nasıl aratacağını bilmemek ), tembellikle veya yetecek kadar yabancı dil bilgisine sahip olmamaktan kaynaklanıyor olabilir.Ama yüksek ihtimal tembellik derim.Şöyle de gerçekleşebilir.İnsan 3-4 gün bir konuya takılıp, günde 2-3 saat tutorial izleyince ister, istemez bir aydınlanma geliyor.Tabi, çözemezse sorunu sıkıntı.Bazen Shift + Delete olarak da tepki verilebiliyor.Neyse konuyu fazla dağıtmadan. :)

hydrogenx' Alıntı:
Yukarıda verdiğim örnekler genel mantığını gösteriyor. Kendi ihtiyacına göre kullanımda değişebilir tabi. Takıldığın nokta olursa daha detaylı olarak inceleriz.

Elde ettiğim transformdaki scale değerini çekebiliyorum.O değeri <= (veya >= de olabilir) yardımıyla belli değerlere göre renklendireceğim.Örneğin; Array[0] scale <= 3 ise açık mavi, Array[x] scale <= 5 ise yeşil gibi.Fakat aşağıdaki resimde normal olarak denedim ve rengini değiştiremedim.Resimde spawnlama işlemini yaptıktan sonraki işlemler görüntüleniyor.Bu sorunu çektiğim verinin değerine göre farklı renkler olmak üzere nasıl düzeltebiliriz?


(Alttaki resimde Source Material seçiliydi.Ekran görüntüsü almadan önce seçimi iptal edip, test etmiştim.)
Ja6DBW.png


Üstteki resmin önündeki döngüyü de alta koyuyorum.Resimde döngü tam anlamıyla test amaçlı 2 tane Print String' den sonra çalışıyor.Tekrar kontrol ederken turuncu okun gösterdiği yerde 'None' ifadesini gördüm.Daha sonra Debug testinde veri çektiğini gördüm.En son resimde bir sorun var mı, varsa nasıl düzeltebiliriz?


ld9qLQ.png


nR2QMR.png
 
Gelecek olan max scale değeri belli mi? Eğer belliyse büyük küçük işlemlerine hiç girmeden otomatik renk ataması yaptırabilirsin. Biraz karmaşık gelebilir fakat açıklamaya çalışacağım.

Mesela Max gelecek olan scale değeri toplamı 15 olsun. Yani X+Y+Z (5+5+5). Bu değeri -240'a eşitleyelim. Geri kalanını da aşağıdaki resimdeki gibi yapabilirsin. 
Kendi projende gelebilecek max scale değerini 15 ile değiştirebilirsin. Max 7+7+7 gelebilirse 15 yerine 21 yazılmalı. Muhtemelen anladın burayı.

7qPQ4Y.png


Bu sayede scale değerleri 1+1+1 olan objenin rengi açık olacak. Scale büyüdükçe renk koyulaşarak kırmızı olacak.


Peki neden -240? Bunu açıklaması epey zor. HSV renk kodlarındaki "H" max 359 renk kodu alabiliyor. Dairesel bir renk paleti olduğundan 1 ile 359 aynı renk. Yani en yüksek rakam da kırmızı en düşük rakam da. Bunu istemediğimden en yüksek rakamın rengi değişene kadar rakamı düşürdüm. Bu da 240'a tekabul ediyor. Fakat bu şekilde bıraksaydım elde edeceğim sonuç; scale değeri en düşük olanın rengi kırmızı en yüksek olanınki açık bir renk olacaktı. Tam tersini istediğim için sayıyı eksiye çeviriyorum ve -240 oluyor.
Aşağıdaki resimde gördüğün gibi, material içinde renk kodlarında H harfinde yazan sayıyı kurcalarsan dediğimi anlayacaksın.
X0Jl5k.png


Evet farkındayım biraz karmaşık oldu. Biraz daha basit istersen ona da bakarız. 5'ten büyükse kırmızı, 3'ten küçükse mavi yap gibi...


Bu arada diğer sorduğun soru için; bir problem yok gibi görünüyor.
 
Geçen ki çalıştıramama hatam da daldınlığıma gelmiş.Parametre değerini belirlemeden 'Color' diye paratmere değerini çekmeye çalışıyormuşum.Tabi, çekilen parametre adı 'Color' ama değerin adını tanımlamayınca 'None' olduğundan renkleri değiştiremedim.Dynamic material konusunda deneyecek arkadaşlar olursa, böyle hatalara dikkat etsinler.Kastettiğim turuncu okla gösterilen değer.


oj9G62.png


hydrogenx' Alıntı:
Mesela Max gelecek olan scale değeri toplamı 15 olsun. Yani X+Y+Z (5+5+5). Bu değeri -240'a eşitleyelim. Geri kalanını da aşağıdaki resimdeki gibi yapabilirsin.
Kendi projende gelebilecek max scale değerini 15 ile değiştirebilirsin. Max 7+7+7 gelebilirse 15 yerine 21 yazılmalı. Muhtemelen anladın burayı.

Anladım hocam dediğinizi ve oldukça kullanışlı hatta fikrimi değiştirip, dediğinize de eklemek istiyorum.Aslında projeyi tam olarak bitirmeden şunu da ekliyeyim, bunu da ekliyeyim denmemesi gerekir.Öyle olunca çoğunlukla işin içinden çıkılmaz bir hal alıyor ve çok detaylı bir proje yapmaya çalışırken bulabiliyorsunuz kendinizi.Yani, en azından edindiğim tecrübeler bunu gösteriyor olsa da bu seferlik bir istisna yapmak istiyorum.Çünkü renkler dışında sadece hazırlanıp menü ve level tasarımlarının giydirilmesi kaldı.Sanırım kod olarak yazsam daha rahat ifade edebilirim yapmak istediğimi.

if( scale <= 1.5 )

 makeWhite();

else if( scale <= 3 )

 makeLightBlue();

else if( scale <=4 )

 makeGreen();

else if( scale <=5 )

 makeYellow();

else if( scale <=6 )

 makeOrange();

else if(scale >6 )

 makeRed();​


Tabi, sizin söylediğiniz sistemi entegre edebilirsem daha güzel olur.Mesela 6.1 de açık bir kırmızı tonundayken, 7.5 de kıpkırmızı bir tona dönüşmesi gibi.Bir fikir öneriniz var mı bu konuda bana ?

Bu arada özel mesajdan isminizi, soyisminizi varsa da kişisel web site adresinizi gönderir misiniz? Sizi de projede desteği bulunanlar kısmına eklemek istiyorum.Oldukça yararlı bir şekilde yönlendirdiniz beni. :)
 
Renkleri bir sıralamaya tabi tutmamız gerekiyor. Boyutun büyüğünü kırmızı, küçüğünü mavi yapmak istiyoruz çünkü. Küçük olanı mavi yapmak kolay fakat en büyük olanı kırmızı yapmak için ne kadar büyük olduğunu bilmemiz gerekir.

Biraz daha düzgün bir sistem hazırladım. Bu sistem tam olarak senin istediğin şeyi yapacaktır. En küçük olanı açık mavi, en büyük olanı kırmızı. Tabi Scale toplamının en yüksek olmasını beklediğin sayıyı aşağıdaki kırmızıyla işaretli olan iki yere de yazmalısın. Bir nevi aralık belirtmiş oluyorsun.

Ja65pQ.png


Max 15 olarak belirlersek eğer: 0'a yakın küçük boyutlu objeler açık mavi, 15'e yakın objeler de kırmızı tonlarda olacaktır. Diyelim ki scale toplamı 7.5 olan bir obje var. Yeşil tonlarında olacaktır. Scale toplamı 10 olan obje ise sarı tonlarında olacak. 14 ise turuncu-kırmızı arası bir renk olur. Bu şekilde smooth bir renk paleti elde etmiş olacaksın. Senin kodlayarak verdiğin örnekte 4 ile 5 arasındaki tüm değerler yeşil olur. Fakat benim gösterdiğimde 0.1 bile fark olsa, renk tonlarına yansır. Farkı anlaman için bu örneği verdim.

Peki diyelim ki scale toplamı senin belirlediğin max değerden yüksek bir değer geldi. Bunun çok önemi yok. Çünkü zaten sınırlayıcı olarak "Clamp" ekledik. 20 gelse dahi max değer olan 15'ten işlem görecektir. Yani 15 ve üzeri gelen tüm değerler kırmızı olacaktır.

Takıldığın bir nokta olursa yazarsın.