TR26SkyWalker26TR

Yeni üye
16 Ağu 2019
182
10
0
(26) Eskişehir
Arkadaşlar merhaba. Bugünlerde sık konu açıyorum çünkü çok takılıyorum.  :) Başlığı kısa tutmak zorunda kaldım çünkü sorunum biraz uzun. Şimdi elimizde 2 tane yapay zeka var. Yapılması gereken işler de var, tabii bunlar yapay zekalar oluşturulduktan sonra kullanıcı isterse geliyor. İlk iş geldi ve iş aktörü en yakındaki yapay zeka aktörünü buldu diyelim. Diğer iş geldiğinde de az önceki iş bitmediğinden diğer yapay zekayı çağırması gerekir. Yani iş yapan yapay zekanın işi bitmediyse boşta ve en yakında olanı çağıracak. Mantıken böyle olması gerekiyor ama yazdığım blueprinti çalıştırınca fonksiyon sürekli aynı aktörü çağırıyor. 3-4 farklı fonksiyon denedim ama olmadı. Blueprintim şu şekilde;
https://blueprintue.com/blueprint/2-7j27mz/

Yapay zekayı bulan fonksiyon;
https://blueprintue.com/blueprint/dpu2cc7p/

Bu ise yakındaki yapay zekayı bulan diğer fonksiyon;
https://blueprintue.com/blueprint/jjmp-ww2/

Biraz fazlaca spagetti olmuş olabilir ama şu an dokunmaya korkuyorum. Var mıdır bir öneriniz?
(İlk fonksiyonda return node a aktör bağlanmamış gibi görünüyor ama bağlı.)
 
Merhabalar cep telefonundan bakmaya çalıştım. Öncelikle çok itici olduğunu bile bile şunu söylemek zorundayım. Kod yazarken bırakın kendinizi başkasının bile baktığı zaman anında anlayabileceği şekilde kod yazmak gerekir. Sırf bu yüzden çok iyi kod yazdığı halde işten çıkarılan insanlar var. Hatta şunu söyleyebilirim kodun düzgün ve anlaşılır olması çalışıyor olasından bile daha önemlidir.
İkincisi yapay zeka lı bir şey yapıyorsan bunun için geliştirilmiş olan AI yapılarını kullanmak işini oldukça kolaylaştıracaktır. Mesela behaviour tree aicontroller kullanmadan bunu geliştirmeye çalışmak bana göre elinde kepçe varken kürekle temel kazmaya benzer.
3 ncüsü for each 'te complete kullanmamışsın . Dolayısı ile her zaman ilk olanı verecektir. Muhtemelen daha başka durumlar da vardır ama telden göremiyorum şu an.
 
Hocam aslında şu anki kod dediğim gibi -özellikle iş veren- aşırı spagetti farkındayım, ama hataları düzelttikten sonra en son toparlamayı düşünüyorum. Çünkü ne zaman şu gereksiz diyip silsem bi problem çıkıyor. Behaviour tree yi deneyeceğim, teşekkür ederim.
Blueprinte bakarken benim bile içim sıkılıyor.
Edit : Yok hocam complete ye bağlasam bile diğer aktör gitmiyor. Baştan yapacağım behavior ve ai controller ile.
 
Kod yazma düzeninin böyle olması sorunu bende de zaman zaman oluyor.Sebebi ise sürekli olarak kendimize kaçamak yol aramak, kolaya kaçmaya çalışmak gibi şeyler. 10 tane yol var ise 8 tanesi amatör geri kalan 2 si profesyonel yol.Bizim de profesyonel yöntemleri kullanmamız lazım.Sonra salaş kodlar çıkıyor böyle.
 
Şunu değilde şuraya şunu koysam olur diyorum mesela, ona bir şey gerekiyor ona ona derken böyle oluyor. :D En başından yapay zekayla ilgili şeyleri kullansam hiç sorun olmayacak. :) Bundan önceki hali daha berbattı, bir aktörde 40 tane fonksiyon kullanmıştım.
 
Bu şekilde yapınca yardım almanız da çok güç oluyor. Daha ilk baştan doğru gitmek gerekiyor. 

   Tabiiki bir çok şey deneyebilirsiniz ama denediniz olmadı ise o nodu silin.Unutmak istemeyeceğiniz bir şeyse çok aşağı çekin ve hepsini çekerek "c" tuşu ile comment yorum ekleyin. Ben burda bunu amaçladım diye. Ama başkasına gözükecek bir yerde durmasın. Zaten gereksizse direk silin. Fazladan hiçbirşey kalmasın.

    Node beyaz işlem çizgileri hep düz ve sola doğru olsun bunu yapmak "q" tuşuyla çok kolay direk kendi yapıyor zaten. İki çizgi hiç-bir şekilde birbirinin üstünden geçmesin. Hele beyaz çizgi asla geçmesin. Aynı noda bir başka yerden ihtiyaç duyduğunuzda onu orda bir daha yaratın bağlantı çekmeyin. Mesela karakter heryerden lazım. Yakın yerlere çekin üst üste gelmeyecek şekilde. Ama uzak bir yerde varsa o değişkeni oraya ayrıca bir daha koyun sırf ip uzatmamak için. 

   Yaptığınız iş 10 dan fazla node gerektiriyorsa mantıksal küçük iş parçacıklarına bolun. Bunu fonksiyonlarla yapabilirsiniz. Bu hata bulmayı da kolaylaştırır. Hatanın hangi fonksiyonda olduğunu tesbit edip direk ona yönelmek çok kolaylaşır. Anlaşılması güç bir şeyler yaptığınızda yanına c ile yorum bırakın. Aynı kodu siz de 1 sene sonra açmak zorunda kalabilirsiniz. O zaman şimdi anlayamadığınız şeyi hiç anlayamayacaksınızdır.

Bakın çok kötü örnekler





Yukarıdaki kodu bir çalışma arkadaşı yapmıştı. Ben düzellttim biraz şu hale geldi:



Burda maksadım yardım almanızı kolaylaştırmak. Gerçekten iki bakıp çözebileceğim konuları bu kadar karmaşa gördüğümde içine giresim gelmiyor. Mesele çözümsüz kalıyor üzlüyorum. O yüzden böyle anlatıyorum. Kusura bakmayın.
 
Yok hocam haklısınız ben bile sıkılıyorum bakınca dediğim gibi, hepsini sildim baştan alacağım şimdi. Bir sorum olacak konu dışında, mesela node için gereken bir input gerekiyor. Hepsi için ayrı ayrı koymakla tek referansa bağlamak arasında fark oluyor mu performans bakımından? Mesela 4 delayın süresi aynı olacak diyelim, 4 değişken bağlamak yerine tek değişken bağlasak fark eder mi?
 
Senin şu aşamada farkedebileceğin bir fark oluşmaz. Söyle düşün. Bir tick 0.012 sn de bitiyor diyelim  ki. Arada ki fark 0.000001 belki olacaktır belki olmayacaktır. Onu da sen farkedemessin.
 
Dostum bakındım baya ama sorunu anlayamadım. Ama bana sorarsan Behaviour Tree konusunu öğrenirsen ve uygularsan çok rahat edersin. Bir de event dispatchers konusu çok önemli. Yaptığın şeyler tam Event kullanma yeri ama sen başka yollarla ulaşmışsın ve çok dolambaçlı olmuş. Neler döndüğünü tam anlayamıyorum bu şekilde.
 
Hocam aslında aktörün yaptığı tek şey eğer inşası bitmişse başka mesh ayarlamak, bitmemişse başka mesh ayarlamak kabaca bu. Tek problem bahsettiğim fonksiyon diğer aktörleri çağırmıyor. Sadece 0 indexli aktörü çağırıyor.
Event dispatchers a mutlaka bakacağım hiçbir fikrim yok. Bir kaç tane interface ve 3-4 e yakın fonksiyon var.

Hocam yemin ediyorum behavior tree ve blackboard çözdü işi çok teşekkür ediyorum. :)