furkanxdgs4

Yeni üye
14 May 2016
153
9
0
Belirtilmemiş
Merhaba arkadaşlar hepinize kolay gelsin. Ben çoklu oyuncu desteği olmayan yani sadece tek kişilik oyuncu modlu (Single Player) bir oyun geliştirmek istiyorum. Ancak yapay zeka ve karakter arasında ağı kaliteli ve olabildiğince az kopukluk yaşanabilecek şekilde kurmak istiyorum. Buyüzden de Blueprint'ler arası ağ kurma videolarını izleyip anlamaya çalışıyorum ancak bu konu hakkında araştırma yaparken Replication diye bir sistem duydum. Yazılardan az çok anladığım kadarıyla çoklu oyunculu bir oyun modunda bir oyuncu karakterin yaptığı hareketlerin diğer oyuncunun ekranında da görünmesini sağlıyormuş. Ancak araştırırken hep çoklu oyunculu modlar için yapıldığını gördüm ve izlediğim videolarda hep Server-Client ilişkisinden bahsettiler. Ben çoklu oyuncu modu yapmak istemiyorum ve Server-Client gibi birden fazla bilgisayarın bulunacağı bir sisteme gerek duymuyorum. Ancak şöyle bir nokta aklıma takıldı; Eğer bir haritaya iki farklı oyuncu eklendiğinde birbirlerinin hareketlerini göremiyorlarsa, yapay zekalar nasıl görüyor? Aklıma bu olayın asıl teknik mantığı hakkında bir düşünce geldi, karaktere animasyonu oynat dememize rağmen aslında karakter kendi evreninde animasyonu oynatıyor yani harita-dünya üzerinde kalıcı bir şekilde yapmıyor, yaptığı hakkındaki bilgileri harita görmüyor/veriler herhangi bir yere aktarılmıyor ve buyüzden de diğer oyuncu animasyon oynatan karakter herhangi bir veri akışı gerçekleştirmediği için verilere erişemeyip onun oynattığı animasyonu göremiyor. Peki aynı şey yapay zekalar üzerinde de mi geçerli? Çünkü karakterimiz aslında basit bir şekilde Play Anim Montage dediğimizde kendi Blueprint'i içerisinde bunu gerçekleştiriyor ve buyüzden de karaktere bağlı kamerada animasyon görünüyor, ama başka bir blueprint kamerası devreye girdiğinde aslında karakterimiz o animasyonu oynatmıyor. Çünkü blueprint dışında oynatsaydı diğer oyuncu kamerasının görmemesi için bir sebep yok. Buyüzden de yapay zeka sistemi geliştirirken durmadan Cast To gibi direk iki blueprint arasında veri çekmek yerine -çünkü birden fazla ve birden farklı yapay zeka geldiğinde tek karaktere birden fazla döngü trafiği bağlanacak ve her yapay zeka aynı şeyi defalarca sorgulayacak- Replication sistemi ile karakterimizin Blueprint içinde yaptığı şeyi dışarı aktarıp burdan da tüm yapay zeka ağına bilgi yollarsak daha kaliteli, hızlıca düzenlenebilir ve tepkisel bir ağ oluşturabiliriz diye düşünüyorum ama dediğim şeyin gerçekleşmesi için Replication sistemine mi ihtiyacım var anlamadım. Replication ana mantığı detaylıca anlatabilmeniz mümkün mü?
 
furkanxdgs4' Alıntı:
Merhaba arkadaşlar hepinize kolay gelsin. Ben çoklu oyuncu desteği olmayan yani sadece tek kişilik oyuncu modlu (Single Player) bir oyun geliştirmek istiyorum. Ancak yapay zeka ve karakter arasında ağı kaliteli ve olabildiğince az kopukluk yaşanabilecek şekilde kurmak istiyorum. Buyüzden de Blueprint'ler arası ağ kurma videolarını izleyip anlamaya çalışıyorum ancak bu konu hakkında araştırma yaparken Replication diye bir sistem duydum. Yazılardan az çok anladığım kadarıyla çoklu oyunculu bir oyun modunda bir oyuncu karakterin yaptığı hareketlerin diğer oyuncunun ekranında da görünmesini sağlıyormuş. Ancak araştırırken hep çoklu oyunculu modlar için yapıldığını gördüm ve izlediğim videolarda hep Server-Client ilişkisinden bahsettiler. Ben çoklu oyuncu modu yapmak istemiyorum ve Server-Client gibi birden fazla bilgisayarın bulunacağı bir sisteme gerek duymuyorum. Ancak şöyle bir nokta aklıma takıldı; Eğer bir haritaya iki farklı oyuncu eklendiğinde birbirlerinin hareketlerini göremiyorlarsa, yapay zekalar nasıl görüyor? Aklıma bu olayın asıl teknik mantığı hakkında bir düşünce geldi, karaktere animasyonu oynat dememize rağmen aslında karakter kendi evreninde animasyonu oynatıyor yani harita-dünya üzerinde kalıcı bir şekilde yapmıyor, yaptığı hakkındaki bilgileri harita görmüyor/veriler herhangi bir yere aktarılmıyor ve buyüzden de diğer oyuncu animasyon oynatan karakter herhangi bir veri akışı gerçekleştirmediği için verilere erişemeyip onun oynattığı animasyonu göremiyor. Peki aynı şey yapay zekalar üzerinde de mi geçerli? Çünkü karakterimiz aslında basit bir şekilde Play Anim Montage dediğimizde kendi Blueprint'i içerisinde bunu gerçekleştiriyor ve buyüzden de karaktere bağlı kamerada animasyon görünüyor, ama başka bir blueprint kamerası devreye girdiğinde aslında karakterimiz o animasyonu oynatmıyor. Çünkü blueprint dışında oynatsaydı diğer oyuncu kamerasının görmemesi için bir sebep yok. Buyüzden de yapay zeka sistemi geliştirirken durmadan Cast To gibi direk iki blueprint arasında veri çekmek yerine -çünkü birden fazla ve birden farklı yapay zeka geldiğinde tek karaktere birden fazla döngü trafiği bağlanacak ve her yapay zeka aynı şeyi defalarca sorgulayacak- Replication sistemi ile karakterimizin Blueprint içinde yaptığı şeyi dışarı aktarıp burdan da tüm yapay zeka ağına bilgi yollarsak daha kaliteli, hızlıca düzenlenebilir ve tepkisel bir ağ oluşturabiliriz diye düşünüyorum ama dediğim şeyin gerçekleşmesi için Replication sistemine mi ihtiyacım var anlamadım. Replication ana mantığı detaylıca anlatabilmeniz mümkün mü?

Muhtemelen Blueprint Communucation konusunu Networking ile karıştırmışsınız.

Eğer bir oyunda birden çok gerçek oyuncu, daha doğrusu birden çok bilgisayar işin içine dahil olmuyorsa; o oyun networkinge ihtiyaç duymaz. Bilgisayar ağları(UE4de Networking konusu), birden çok bilgisayarın birbiri ile haberleşmesi ile ilgilenir. Bunun dışında, sizin yapmak istediğiniz oyun türü Networking kullanmaz. Birden çok karakterin olması birşey değiştirmez. Oyununuz yalnızca bir bilgisayarda çalışır ve başka bir bilgisayardan(sunucudan) veri almaya ihtiyaç duymaz.

Blueprint Communucation, iki farklı blueprint nesnesinin birbiri ile haberleşmesi meselesidir. Tipik bir çoklu oyuncu modelinde ise bir oyun, her bilgisayarda çalıştırılır. Ancak denklik sağlamak için karar aşamaları tek bir bilgisayarda(server) gerçeklenir ve sonuç diğer sistemlere(client) iletilir.

Not: Lütfen paragraf kullanın.
 
furkanxdgs4' Alıntı:
Merhaba arkadaşlar hepinize kolay gelsin. Ben çoklu oyuncu desteği olmayan yani sadece tek kişilik oyuncu modlu (Single Player) bir oyun geliştirmek istiyorum. Ancak yapay zeka ve karakter arasında ağı kaliteli ve olabildiğince az kopukluk yaşanabilecek şekilde kurmak istiyorum. Buyüzden de Blueprint'ler arası ağ kurma videolarını izleyip anlamaya çalışıyorum ancak bu konu hakkında araştırma yaparken Replication diye bir sistem duydum. Yazılardan az çok anladığım kadarıyla çoklu oyunculu bir oyun modunda bir oyuncu karakterin yaptığı hareketlerin diğer oyuncunun ekranında da görünmesini sağlıyormuş. Ancak araştırırken hep çoklu oyunculu modlar için yapıldığını gördüm ve izlediğim videolarda hep Server-Client ilişkisinden bahsettiler. Ben çoklu oyuncu modu yapmak istemiyorum ve Server-Client gibi birden fazla bilgisayarın bulunacağı bir sisteme gerek duymuyorum. Ancak şöyle bir nokta aklıma takıldı; Eğer bir haritaya iki farklı oyuncu eklendiğinde birbirlerinin hareketlerini göremiyorlarsa, yapay zekalar nasıl görüyor? Aklıma bu olayın asıl teknik mantığı hakkında bir düşünce geldi, karaktere animasyonu oynat dememize rağmen aslında karakter kendi evreninde animasyonu oynatıyor yani harita-dünya üzerinde kalıcı bir şekilde yapmıyor, yaptığı hakkındaki bilgileri harita görmüyor/veriler herhangi bir yere aktarılmıyor ve buyüzden de diğer oyuncu animasyon oynatan karakter herhangi bir veri akışı gerçekleştirmediği için verilere erişemeyip onun oynattığı animasyonu göremiyor. Peki aynı şey yapay zekalar üzerinde de mi geçerli? Çünkü karakterimiz aslında basit bir şekilde Play Anim Montage dediğimizde kendi Blueprint'i içerisinde bunu gerçekleştiriyor ve buyüzden de karaktere bağlı kamerada animasyon görünüyor, ama başka bir blueprint kamerası devreye girdiğinde aslında karakterimiz o animasyonu oynatmıyor. Çünkü blueprint dışında oynatsaydı diğer oyuncu kamerasının görmemesi için bir sebep yok. Buyüzden de yapay zeka sistemi geliştirirken durmadan Cast To gibi direk iki blueprint arasında veri çekmek yerine -çünkü birden fazla ve birden farklı yapay zeka geldiğinde tek karaktere birden fazla döngü trafiği bağlanacak ve her yapay zeka aynı şeyi defalarca sorgulayacak- Replication sistemi ile karakterimizin Blueprint içinde yaptığı şeyi dışarı aktarıp burdan da tüm yapay zeka ağına bilgi yollarsak daha kaliteli, hızlıca düzenlenebilir ve tepkisel bir ağ oluşturabiliriz diye düşünüyorum ama dediğim şeyin gerçekleşmesi için Replication sistemine mi ihtiyacım var anlamadım. Replication ana mantığı detaylıca anlatabilmeniz mümkün mü?

@cahitburak'ın dediği gibi olayı çok karıştırmışsınız.

Blueprintler arasında iletişim kurmak için birincisi referans yöntemidir. diyelim ki yeni bir aktör yaratıyoruz. aktör yaratıldığındaki target düğümü sizin onu nerede kullanabileceğinizi gösterir. bunu dışında event dispatcherlar sayesinde bir olay olduğunda mesela oyucu A tuşuna bastı ve kapı açıldı o zaman eventeri kullanabilirsiniz. cast ise farklı blueprintler arasındaki hiyearşi sistemi ile alakalı miras aldığı sınıftan veya değişkenden bir başka blueprint iletişimi olayıdır.

yapy zekalar arasında bir etkileşim istiyorsanız event dispatcher kullanmak en mantıklıdır. bir olay örgüsüne girildiğinde başka olayları aynı zamanda çağırabilen bu özellik farklı blueprintler arasındaki özellikleri sağlıyor. call, bind, assign gibi metodları var. UE4'de yapay zekada blackboard bir yapay zekanın ne gibi durumlarda davranış ağaçlarına göre hareket sergilemesi gerektiğini belirtir.

siz daha çok teorik olarak işe bakmaya çalıştınız. teorik olarak değil basit olarak düşünürsek client servera belirli mesajlar yolluyor mesela (2,3,4) noktasına git. o server clienti yolladığı mesajları alıp tekrar cliente mesaj yolluyor ve client veya clientler bu aldığı mesajlar sayesinde hareket ediyor.

bir diğer durum ise dediğiniz gibi yapay zekalar nasıl anlaşıyor? siz nasıl W tuşuna bastığınızda çerçeveler arasında yeni bir görüntü çizip karkater bir adım attığında nasılsa blackboard ve davranış özellikleri ile o şekilde hareket ediyor.  

Aşağıda bir resme bakalım ve ne olacağını düşünelim:
GameFramework.jpg

AI controller GameMode ve GameState sınıfına katılan (yani o sınıfın mirasını alan) bir sınıfmış. Aynı zamanda AI Controller Pawn sınıfını yönetebilen(Possess) bir sınıfmış. Yani AIController Pawn sınıfnı belirli bir duruma göre değişitiyor. Pawnlar sayesinde görüntüleri elde edebiliyoruz

Teorik açıdan daha fazla bilgi almak için ya Epic Games'de çalışmanız lazım. Ya da kaynak kodlarını inceleyerek AIController nasıl replicate olduğu durumlara bakabilrisiniz.
Soru sormaktan asla çekinmeyin.
 
Khubur' Alıntı:
furkanxdgs4' Alıntı:
Merhaba arkadaşlar hepinize kolay gelsin. Ben çoklu oyuncu desteği olmayan yani sadece tek kişilik oyuncu modlu (Single Player) bir oyun geliştirmek istiyorum. Ancak yapay zeka ve karakter arasında ağı kaliteli ve olabildiğince az kopukluk yaşanabilecek şekilde kurmak istiyorum. Buyüzden de Blueprint'ler arası ağ kurma videolarını izleyip anlamaya çalışıyorum ancak bu konu hakkında araştırma yaparken Replication diye bir sistem duydum. Yazılardan az çok anladığım kadarıyla çoklu oyunculu bir oyun modunda bir oyuncu karakterin yaptığı hareketlerin diğer oyuncunun ekranında da görünmesini sağlıyormuş. Ancak araştırırken hep çoklu oyunculu modlar için yapıldığını gördüm ve izlediğim videolarda hep Server-Client ilişkisinden bahsettiler. Ben çoklu oyuncu modu yapmak istemiyorum ve Server-Client gibi birden fazla bilgisayarın bulunacağı bir sisteme gerek duymuyorum. Ancak şöyle bir nokta aklıma takıldı; Eğer bir haritaya iki farklı oyuncu eklendiğinde birbirlerinin hareketlerini göremiyorlarsa, yapay zekalar nasıl görüyor? Aklıma bu olayın asıl teknik mantığı hakkında bir düşünce geldi, karaktere animasyonu oynat dememize rağmen aslında karakter kendi evreninde animasyonu oynatıyor yani harita-dünya üzerinde kalıcı bir şekilde yapmıyor, yaptığı hakkındaki bilgileri harita görmüyor/veriler herhangi bir yere aktarılmıyor ve buyüzden de diğer oyuncu animasyon oynatan karakter herhangi bir veri akışı gerçekleştirmediği için verilere erişemeyip onun oynattığı animasyonu göremiyor. Peki aynı şey yapay zekalar üzerinde de mi geçerli? Çünkü karakterimiz aslında basit bir şekilde Play Anim Montage dediğimizde kendi Blueprint'i içerisinde bunu gerçekleştiriyor ve buyüzden de karaktere bağlı kamerada animasyon görünüyor, ama başka bir blueprint kamerası devreye girdiğinde aslında karakterimiz o animasyonu oynatmıyor. Çünkü blueprint dışında oynatsaydı diğer oyuncu kamerasının görmemesi için bir sebep yok. Buyüzden de yapay zeka sistemi geliştirirken durmadan Cast To gibi direk iki blueprint arasında veri çekmek yerine -çünkü birden fazla ve birden farklı yapay zeka geldiğinde tek karaktere birden fazla döngü trafiği bağlanacak ve her yapay zeka aynı şeyi defalarca sorgulayacak- Replication sistemi ile karakterimizin Blueprint içinde yaptığı şeyi dışarı aktarıp burdan da tüm yapay zeka ağına bilgi yollarsak daha kaliteli, hızlıca düzenlenebilir ve tepkisel bir ağ oluşturabiliriz diye düşünüyorum ama dediğim şeyin gerçekleşmesi için Replication sistemine mi ihtiyacım var anlamadım. Replication ana mantığı detaylıca anlatabilmeniz mümkün mü?

@cahitburak'ın dediği gibi olayı çok karıştırmışsınız.

Blueprintler arasında iletişim kurmak için birincisi referans yöntemidir. diyelim ki yeni bir aktör yaratıyoruz. aktör yaratıldığındaki target düğümü sizin onu nerede kullanabileceğinizi gösterir. bunu dışında event dispatcherlar sayesinde bir olay olduğunda mesela oyucu A tuşuna bastı ve kapı açıldı o zaman eventeri kullanabilirsiniz. cast ise farklı blueprintler arasındaki hiyearşi sistemi ile alakalı miras aldığı sınıftan veya değişkenden bir başka blueprint iletişimi olayıdır.

yapy zekalar arasında bir etkileşim istiyorsanız event dispatcher kullanmak en mantıklıdır. bir olay örgüsüne girildiğinde başka olayları aynı zamanda çağırabilen bu özellik farklı blueprintler arasındaki özellikleri sağlıyor. call, bind, assign gibi metodları var. UE4'de yapay zekada blackboard bir yapay zekanın ne gibi durumlarda davranış ağaçlarına göre hareket sergilemesi gerektiğini belirtir.

siz daha çok teorik olarak işe bakmaya çalıştınız. teorik olarak değil basit olarak düşünürsek client servera belirli mesajlar yolluyor mesela (2,3,4) noktasına git. o server clienti yolladığı mesajları alıp tekrar cliente mesaj yolluyor ve client veya clientler bu aldığı mesajlar sayesinde hareket ediyor.

bir diğer durum ise dediğiniz gibi yapay zekalar nasıl anlaşıyor? siz nasıl W tuşuna bastığınızda çerçeveler arasında yeni bir görüntü çizip karkater bir adım attığında nasılsa blackboard ve davranış özellikleri ile o şekilde hareket ediyor.  

Aşağıda bir resme bakalım ve ne olacağını düşünelim:
GameFramework.jpg

AI controller GameMode ve GameState sınıfına katılan (yani o sınıfın mirasını alan) bir sınıfmış. Aynı zamanda AI Controller Pawn sınıfını yönetebilen(Possess) bir sınıfmış. Yani AIController Pawn sınıfnı belirli bir duruma göre değişitiyor. Pawnlar sayesinde görüntüleri elde edebiliyoruz

Teorik açıdan daha fazla bilgi almak için ya Epic Games'de çalışmanız lazım. Ya da kaynak kodlarını inceleyerek AIController nasıl replicate olduğu durumlara bakabilrisiniz.
Soru sormaktan asla çekinmeyin.
Sanırım olayı kavradım. Anladığım kadarıyla;
UE4 içinde Play demeden önce karakter ayarladığımızda teknik olarak gerçek zamanlı bir Server-Client mantığı kuruluyor. Yani tek harita içerisine iki tane blueprint atıp bunların haberleşmesini beklemiyor. Direkt olarak bir tane verici, bir tane alıcı istasyonu kuruyor ve aradaki veri akışının sağlanabilmesi için alıcı ve vericinin uyguladığı işlemlerin birbirine yollanmasını sağlıyor. Yani aslında biri iş yapıyor, ancak ikisinin de ortak alması gereken veriyi değil kendi üzerindeki veriyi değiştiriyor. Replication olayını böyle anladım.
Yapay zeka sistemi üzerinde ise sadece Blueprint Communication olayını araştırmam gerektiğini anladım. İlk başta anladığım şey "Blueprint ile uğraşmadan, direk oyun motorunun ana sistemine yapılan bilgiyi yollarım ve oyun motoru da yapay zeka trafik akışını bu bilgilere göre düzenler. Bu sayede de benzer verileri durmadan işlemektense, direkt olarak topluca kontrol edilir." diye düşündüm ancak şimdi düşününce saçma olduğunu farkettim. Sonuçta her oluşturulan Pawn, iş yapmak için dışarıdan bir bilgi alımına ihtiyaç duyacak ve buyüzden de her türlü sıkı bir veri trafik akışı sağlanacak. 
Son olarak, yapay zekalar verinin gitmesi için yapmam gereken şeyi anlamadım. Şurada sorun yaşıyorum; verdiğiniz resimde AI Controller, Pawn sınıfını yöneten bir sınıf. Pawn'dan kasıt yapay zeka bottan bahsediyoruz değil mi? Yani yapay zekanın bulunduğu karakter (Yapay zekayı insanlar için uyguladığımızı düşünelim). Mantıklı, yani bir zeka karar veriyor ve o kararı fiziksel bir karakter görsel olarak uyguluyor. Ancak AI Controller'ı neler yönetiyor veya ne içeriyor? Behaviour Tree, Blackboard gibi mantıksal Blueprint'ler ise bu Blueprint'lere gereken veri akışını nasıl yapacağız? Event Dispatcher'dan yapacağımı söylemişsiniz ancak Event Dispatcher hakkında 1-2 konuya bakmama rağmen herhangi bir fikir edinemedim. Event Dispatcher klasik bir Custom Event'ten farkı nedir ve girilen bilgileri/yapılan eylemleri nasıl diğer Blueprint'lere aktarıyor? Biraz hazırcı gibi oldum çünkü fazla araştırma fırsatı bulamadım ama Unreal Engine'ın kendi Wiki'sini okumama rağmen hiçbir fikir edinemediğimden bu konudaki bilgilerinizi öğrenmek isterim. Yine de tüm yardımlarınız için teşekkür ederim. 
    DÜZENLEME: Event Dispatcher hakkında 1-2 video izledikten sonra az çok mantığını kavradım. Bir olayın yapılırken aynı anda bir başka olayın da yapılmasını sağlıyor ve artı olarak bunu farklı Blueprint'ler arası yapabiliyor. Siz de bunu söylemiştiniz ancak pratik video izleyince daha iyi anladım. Şuana kadar (basit eğitim videoları yüzünden) iki farklı Blueprint arası ilişkiyi 1. Blueprint'te herhangi bir değişken oluşturup 2. Blueprint içerisinde o değişkeni 1. Blueprint'ten Cast To edip eğer Cast To'dan gelen koşul değişkeni (Boolean) True ise işlemlere 2. Blueprint içerisinden devam ediyordum. Event Dispatcher sayesinde bu saçma ve çok fazla tek kullanımlık değişken gerektiren sistemden kurtulup direkt olarak "Bir Blueprint şunu yaparsa bu Blueprint de bunu yapsın." dememize olanak sağlıyor. Yapay zeka sisteminin yapısını tam olarak bilmediğimden Event Dispatcher'ları şuanlık verimli kullanamayacağım. Öncelikle yapay zeka sistemi üzerinde Behaviour Tree, BlackBoard ve AI Controller üzerinde daha çok bilgiye sahip olmam gerek.
 
furkanxdgs4' Alıntı:
Khubur' Alıntı:
@cahitburak'ın dediği gibi olayı çok karıştırmışsınız.

Blueprintler arasında iletişim kurmak için birincisi referans yöntemidir. diyelim ki yeni bir aktör yaratıyoruz. aktör yaratıldığındaki target düğümü sizin onu nerede kullanabileceğinizi gösterir. bunu dışında event dispatcherlar sayesinde bir olay olduğunda mesela oyucu A tuşuna bastı ve kapı açıldı o zaman eventeri kullanabilirsiniz. cast ise farklı blueprintler arasındaki hiyearşi sistemi ile alakalı miras aldığı sınıftan veya değişkenden bir başka blueprint iletişimi olayıdır.

yapy zekalar arasında bir etkileşim istiyorsanız event dispatcher kullanmak en mantıklıdır. bir olay örgüsüne girildiğinde başka olayları aynı zamanda çağırabilen bu özellik farklı blueprintler arasındaki özellikleri sağlıyor. call, bind, assign gibi metodları var. UE4'de yapay zekada blackboard bir yapay zekanın ne gibi durumlarda davranış ağaçlarına göre hareket sergilemesi gerektiğini belirtir.

siz daha çok teorik olarak işe bakmaya çalıştınız. teorik olarak değil basit olarak düşünürsek client servera belirli mesajlar yolluyor mesela (2,3,4) noktasına git. o server clienti yolladığı mesajları alıp tekrar cliente mesaj yolluyor ve client veya clientler bu aldığı mesajlar sayesinde hareket ediyor.

bir diğer durum ise dediğiniz gibi yapay zekalar nasıl anlaşıyor? siz nasıl W tuşuna bastığınızda çerçeveler arasında yeni bir görüntü çizip karkater bir adım attığında nasılsa blackboard ve davranış özellikleri ile o şekilde hareket ediyor.  

Aşağıda bir resme bakalım ve ne olacağını düşünelim:
GameFramework.jpg

AI controller GameMode ve GameState sınıfına katılan (yani o sınıfın mirasını alan) bir sınıfmış. Aynı zamanda AI Controller Pawn sınıfını yönetebilen(Possess) bir sınıfmış. Yani AIController Pawn sınıfnı belirli bir duruma göre değişitiyor. Pawnlar sayesinde görüntüleri elde edebiliyoruz

Teorik açıdan daha fazla bilgi almak için ya Epic Games'de çalışmanız lazım. Ya da kaynak kodlarını inceleyerek AIController nasıl replicate olduğu durumlara bakabilrisiniz.
Soru sormaktan asla çekinmeyin.
Sanırım olayı kavradım. Anladığım kadarıyla;
UE4 içinde Play demeden önce karakter ayarladığımızda teknik olarak gerçek zamanlı bir Server-Client mantığı kuruluyor. Yani tek harita içerisine iki tane blueprint atıp bunların haberleşmesini beklemiyor. Direkt olarak bir tane verici, bir tane alıcı istasyonu kuruyor ve aradaki veri akışının sağlanabilmesi için alıcı ve vericinin uyguladığı işlemlerin birbirine yollanmasını sağlıyor. Yani aslında biri iş yapıyor, ancak ikisinin de ortak alması gereken veriyi değil kendi üzerindeki veriyi değiştiriyor. Replication olayını böyle anladım.
Yapay zeka sistemi üzerinde ise sadece Blueprint Communication olayını araştırmam gerektiğini anladım. İlk başta anladığım şey "Blueprint ile uğraşmadan, direk oyun motorunun ana sistemine yapılan bilgiyi yollarım ve oyun motoru da yapay zeka trafik akışını bu bilgilere göre düzenler. Bu sayede de benzer verileri durmadan işlemektense, direkt olarak topluca kontrol edilir." diye düşündüm ancak şimdi düşününce saçma olduğunu farkettim. Sonuçta her oluşturulan Pawn, iş yapmak için dışarıdan bir bilgi alımına ihtiyaç duyacak ve buyüzden de her türlü sıkı bir veri trafik akışı sağlanacak. 
Son olarak, yapay zekalar verinin gitmesi için yapmam gereken şeyi anlamadım. Şurada sorun yaşıyorum; verdiğiniz resimde AI Controller, Pawn sınıfını yöneten bir sınıf. Pawn'dan kasıt yapay zeka bottan bahsediyoruz değil mi? Yani yapay zekanın bulunduğu karakter (Yapay zekayı insanlar için uyguladığımızı düşünelim). Mantıklı, yani bir zeka karar veriyor ve o kararı fiziksel bir karakter görsel olarak uyguluyor. Ancak AI Controller'ı neler yönetiyor veya ne içeriyor? Behaviour Tree, Blackboard gibi mantıksal Blueprint'ler ise bu Blueprint'lere gereken veri akışını nasıl yapacağız? Event Dispatcher'dan yapacağımı söylemişsiniz ancak Event Dispatcher hakkında 1-2 konuya bakmama rağmen herhangi bir fikir edinemedim. Event Dispatcher klasik bir Custom Event'ten farkı nedir ve girilen bilgileri/yapılan eylemleri nasıl diğer Blueprint'lere aktarıyor? Biraz hazırcı gibi oldum çünkü fazla araştırma fırsatı bulamadım ama Unreal Engine'ın kendi Wiki'sini okumama rağmen hiçbir fikir edinemediğimden bu konudaki bilgilerinizi öğrenmek isterim. Yine de tüm yardımlarınız için teşekkür ederim. 
    DÜZENLEME: Event Dispatcher hakkında 1-2 video izledikten sonra az çok mantığını kavradım. Bir olayın yapılırken aynı anda bir başka olayın da yapılmasını sağlıyor ve artı olarak bunu farklı Blueprint'ler arası yapabiliyor. Siz de bunu söylemiştiniz ancak pratik video izleyince daha iyi anladım. Şuana kadar (basit eğitim videoları yüzünden) iki farklı Blueprint arası ilişkiyi 1. Blueprint'te herhangi bir değişken oluşturup 2. Blueprint içerisinde o değişkeni 1. Blueprint'ten Cast To edip eğer Cast To'dan gelen koşul değişkeni (Boolean) True ise işlemlere 2. Blueprint içerisinden devam ediyordum. Event Dispatcher sayesinde bu saçma ve çok fazla tek kullanımlık değişken gerektiren sistemden kurtulup direkt olarak "Bir Blueprint şunu yaparsa bu Blueprint de bunu yapsın." dememize olanak sağlıyor. Yapay zeka sisteminin yapısını tam olarak bilmediğimden Event Dispatcher'ları şuanlık verimli kullanamayacağım. Öncelikle yapay zeka sistemi üzerinde Behaviour Tree, BlackBoard ve AI Controller üzerinde daha çok bilgiye sahip olmam gerek.
Pawn ingilizce anlamı piyon ya da rehin anlamına gelmektedir. Pawnı bir satranç tahtasındaki bir taş gibi düşünebilirsiniz. Diyelim ki 3B düzlemde Vezirin yerine geçtiniz ve W,A,S,D tuşlarıyla ileri geri yönetiyorsunuz. O zaman sizin PlayerController'ınız ile veziri yönettiğiniz için posses konumuna geçtiniz. Böyle düşünebilirsiniz.

Oyunların genel döngülerinde eğer tek kişilik oyunsa server-client mantığı yoktur sana şöyle bir döngü kurayım eğer oyuncu alt+f4 e basmadığı sürece grafikleri çiz. ya da pencere açık olduğu sürece grafikleri çiz. Pawn dışarıdan ya da içeriden bir bilgi alacak evet. Ve bu AIControllera göre değişik davranışlar sergileyecek. AI ile ilgilenmek istiyorsanız bence daha temelden en azından genel bir konsept olarak bir kitap satın alıp okuyabilirsiniz(türkçe olanları önermiyorum saçmalıyorlar şu kendini girişimci sanıp bir işe girişemeyenler gibi).


https://www.youtube.com/playlist?list=PL3hM7_RDaHMz0umAPdszT172uhZTFuP94

https://www.raywenderlich.com/24824/introduction-to-ai-programming-for-games
https://www.amazon.com/gp/product/0...veASIN=0123747317&linkCode=as2&tag=raywend-20

Bir diğer iletişim şekli Blueprint Interface ona da dikkat etmelisiniz. Daha önceden modellemeci olmak istediğinizi duydum. Kendinize belirli bir alan seçmek en iyisi olacaktır. Mesela ben oynanış(gameplay) programlama ile uğraşıyorum. pratik yaptıkça ve ilgilendikçe kendinizi geliştireceksiniz.
 
Khubur' Alıntı:
Pawn ingilizce anlamı piyon ya da rehin anlamına gelmektedir. Pawnı bir satranç tahtasındaki bir taş gibi düşünebilirsiniz. Diyelim ki 3B düzlemde Vezirin yerine geçtiniz ve W,A,S,D tuşlarıyla ileri geri yönetiyorsunuz. O zaman sizin PlayerController'ınız ile veziri yönettiğiniz için posses konumuna geçtiniz. Böyle düşünebilirsiniz.
Oyunların genel döngülerinde eğer tek kişilik oyunsa server-client mantığı yoktur sana şöyle bir döngü kurayım eğer oyuncu alt+f4 e basmadığı sürece grafikleri çiz. ya da pencere açık olduğu sürece grafikleri çiz. Pawn dışarıdan ya da içeriden bir bilgi alacak evet. Ve bu AIControllera göre değişik davranışlar sergileyecek. AI ile ilgilenmek istiyorsanız bence daha temelden en azından genel bir konsept olarak bir kitap satın alıp okuyabilirsiniz(türkçe olanları önermiyorum saçmalıyorlar şu kendini girişimci sanıp bir işe girişemeyenler gibi).


https://www.youtube.com/playlist?list=PL3hM7_RDaHMz0umAPdszT172uhZTFuP94

https://www.raywenderlich.com/24824/introduction-to-ai-programming-for-games
https://www.amazon.com/gp/product/0...veASIN=0123747317&linkCode=as2&tag=raywend-20

Bir diğer iletişim şekli Blueprint Interface ona da dikkat etmelisiniz. Daha önceden modellemeci olmak istediğinizi duydum. Kendinize belirli bir alan seçmek en iyisi olacaktır. Mesela ben oynanış(gameplay) programlama ile uğraşıyorum. pratik yaptıkça ve ilgilendikçe kendinizi geliştireceksiniz.

Bir alan seçmem konusunda haklısınız. Aslında tek tarafa odaklansam ve o tarafta ustalaşsam en azından geleceğim adına daha iyi bir yol çizmiş olurum. Ancak ben şuanlık bir oyun geliştirmek, elimde kaliteli gözüken bir projemin olmasını istiyorum. Buyüzden de hem grafik hem de oynanış üzerinde çalışıyorum. Çevremde vs. kimseyle oyun geliştirmek için konuşamayacağımdan (Herkes "Fen Lisesi'ne geldim, tabii ki doktor olucam diyor) tüm işleriyle kendim uğraşıyorum ve aslında bundan zevk de alıyorum. Şuan daha yaşım genç ve hiçbir yere acelem yok. Buyüzden şuanlık zevk alarak ortaya güzel şeyler koymak ve kendimi her konuda olabildiğince geliştirmek istiyorum. Çünkü şuan "Ben oynanış programcısı/çevre sanatçısı olucam, bu konu üzerinde en iyisi olmam gerek." diye sınırlarsam bir süre sonra aynı işi yapmaktan büyük olasılıkla sıkılacağım veya gelecekte bir şirkete girdiğimde "Aslında diğer tarafta çalışmak bana daha uygunmuş, keşke o alanda ustalaşsaymışım." deyip moralimi bozmak istemiyorum. Oyüzden de kendi projeme ve kendi bilgi hazinemi geliştirmekle uğraşıyorum şuanda. Mesela bir gün okuldan dolayı yorgun olduğumda kafamı dağıtmak için Maya'ya girip modelleme veya kaplamaları (Texture) Substance Designer'a attıktan sonra node sistemi üzerinden basit kaplamaları çılgın ve kaliteli materyallere dönüştürmekle uğraşırım/uğraşıyorum. Bunlar sayesinde de haftasonu kafam rahat olduğunda bunları UE4 içine atıp oynanışı programlama safhasında harita üzerinde ne çeşit hatalar oluşabileceğini görmek güzel olur. Buyüzden şuanlık her konuda az da olsa bir temel atıp kendime bir yol haritası çizmeye çalışıyorum.
Event Dispatcher kullanımını ise az çok kavradım gibime geliyor. Bunu AI üzerinde uygulamak konusunda ise pratik yapa yapa öğrenirim diye düşünüyorum. 
Blueprint Interface'i eskiden, aynı değişkeni birden fazla BP içerisine kolayca sokmak için kullanıyordum ama tam olarak asıl amacının ne olduğu hakkında bir fikir sahibi değilim. Blueprint Interface'i de araştıracağım.
Yapay zeka önerileriniz için kitaptan ziyade internetten eğitim videolarına vs bakarsam kavrarım diye düşünüyorum. Türkçe kaynaklardan ise olabildiğince uzak durmaya çalışıyorum çünkü hem oyun piyasasında kaliteli işlerimiz yok denecek kadar az -buyüzden eğer tam olarak doğru bilinip doğru öğretilseydi bu durumda olmazdık diye bir düşünce geliyor aklıma- hem de çok basit, Triple AAA kafasında kodlama veya modelleme eğitimi ve düşüncesine hakim değiller. Buyüzden Gameplay konusuna bakamasam da modelleme gibi konularda GDC toplantıları, Unreal Engine'ın kendi yayın platformları ve Triple AAA yapımcıların röportajlarını takip ediyorum. Yapay zeka konusunda ise kodlama mantığını çözmek için Unreal Engine'ın eğitim videolarına bakıcam sonrasında da Naughty Dog'un GDC'de paylaştığı "The Last of Us Artificial Intelligence" videosuna bakıp kendi kafamda oturtmaya çalışacağım.
Son olarak da Behaviour Tree içinde yeni bir dal eklendiğinde onun yapılması için Task ekleniyormuş. Ancak her bir görev için "Mesela Ateş Et, şuraya git, buna sık" ayrı olarak Blueprint oluşturması kötü değil mi? Bunun tek Blueprint'te çözülmesi mümkün değil mi acaba? Tabii ki bir oyun içinde yüzlerce Blueprint ve benzer içerikler bulunabilir ama hem göze kötü durması, hem de kısa bir işlev için dosya sayısının arttırılması bana saçma geldi. Tabii ki her Task kendi içinde bir sürü koda (Yürümek konusunda "Durum buysa şu hızda, durum şuysa şu hızda, orda düşman varsa saklan" gibi koşullara) sahip olacak ama yine de tüm yetenekleri aynı Blueprint içinde sınırlamak güzel olurdu.
 
Khubur' Alıntı:
yapy zekalar arasında bir etkileşim istiyorsanız event dispatcher kullanmak en mantıklıdır. bir olay örgüsüne girildiğinde başka olayları aynı zamanda çağırabilen bu özellik farklı blueprintler arasındaki özellikleri sağlıyor. call, bind, assign gibi metodları var. UE4'de yapay zekada blackboard bir yapay zekanın ne gibi durumlarda davranış ağaçlarına göre hareket sergilemesi gerektiğini belirtir.
Blackboard yapay zekanın adı üstünde kara tahtasıdır. Değişken ve referansları tutar, başka bir şey yapmaz. Örneğin yapay zeka için aktif düşmanı belirtmek üzere Enemy isimli bir değişken oluşturulur. Bu Enemy varsa ona doğru git yoksa başka düşman ara gibi bir ifadeyi gerçekleştirmek için; Blackboard üzerinde Enemy isimli bir Actor, Pawn yada Character referansı tutarız. Behavior Tree(Davranış Ağacı) da Blackboard(Karatahta) üzerinden veriyi alıp kararı, davranışı belirler.

Khubur' Alıntı:
GameFramework.jpg

AI controller GameMode ve GameState sınıfına katılan (yani o sınıfın mirasını alan) bir sınıfmış.
Hayır. Burada tamamen çok oyunculu oyunlar düşünülerek tanımlanmış bir sistem var. AIController, GameMode ve GameState sınıfına ne katılır ne de ondan miras alan sınıftır. AIController, Controller sınıfından o da Actor sınıfından kalıtım alır. GameState, GameStateBase sınıfından o da Info sınıfından ve o da Actor sınıfından kalıtım alır. Son olarak GameMode da GameModeBase sınıfından o da Info sınıfından ve o da daha önce de söylemiştik Actor sınıfından kalıtım alır. Söz konusu nesnelerin kalıtım hiyerarşisi bu şekildedir. Resimdeki örnek bir akış şemasıdır ve nesnelerin birbiri ile ilişkilerini gösterir. Bu resimden yorumlanması gereken şey; HUD, Input ve PlayerCameraManager'ın PlayerController üzerinde bulunduğu ve bunların yönetilmesinde PlayerController'ın sözünün geçtiği; Pawn'ın ise PlayerController ve AIController tarafından hakimiyet altına alınabildiği ve son olarak asıl yanıltıcı olduğunu düşündüğüm; Controllerların Gamee katılması. Game burada oyunun kendisidir. UE4 üzerinde Gamein en temel unsuru olan GameMode ve onun bir üyesi(class member) olan GameState oyunu oluşturur. Burada Join, networke bir gönderme daha doğrusu network düşünülerek hazırlanmış bir konsept. Fiziksel olarak gerçekleşen şey ise(ister singleplayer ister multiplayer) Controller nesne örneklerinin Game üzerinde bir listeye eklenmesi. Unutulmamalı ki bir oyuncu, bir oyunda her zaman görsel olarak bulunmayabilir. Bu yüzden Pawn değil de PlayerController onun varlığının temel öğesidir. Bir oyuncunun oyunda Pawn'ı olmayabilir ama PlayerController'ı mutlaka vardır ve oyuncu oyuna katılır katılmaz yaratılır.
[/quote]

furkanxdgs4' Alıntı:
Sanırım olayı kavradım. Anladığım kadarıyla;
UE4 içinde Play demeden önce karakter ayarladığımızda teknik olarak gerçek zamanlı bir Server-Client mantığı kuruluyor. Yani tek harita içerisine iki tane blueprint atıp bunların haberleşmesini beklemiyor. Direkt olarak bir tane verici, bir tane alıcı istasyonu kuruyor ve aradaki veri akışının sağlanabilmesi için alıcı ve vericinin uyguladığı işlemlerin birbirine yollanmasını sağlıyor. Yani aslında biri iş yapıyor, ancak ikisinin de ortak alması gereken veriyi değil kendi üzerindeki veriyi değiştiriyor. Replication olayını böyle anladım.
Doğru.

furkanxdgs4' Alıntı:
Yapay zeka sistemi üzerinde ise sadece Blueprint Communication olayını araştırmam gerektiğini anladım. İlk başta anladığım şey "Blueprint ile uğraşmadan, direk oyun motorunun ana sistemine yapılan bilgiyi yollarım ve oyun motoru da yapay zeka trafik akışını bu bilgilere göre düzenler. Bu sayede de benzer verileri durmadan işlemektense, direkt olarak topluca kontrol edilir." diye düşündüm ancak şimdi düşününce saçma olduğunu farkettim. Sonuçta her oluşturulan Pawn, iş yapmak için dışarıdan bir bilgi alımına ihtiyaç duyacak ve buyüzden de her türlü sıkı bir veri trafik akışı sağlanacak. 

Bu mesele tamamen OOP programlama ile alakalı. Sadece Pawn değil, diğer bütün nesne örnekleri sadece ve sadece kendi üyelerine(değişken,referans...vb) doğrudan erişebilir. Bu program yönetimini kolaylaştırmak açısından gereklidir. Eğer tüm değişkenlere her yerden global olarak erişilebilseydi, bunları yönetmek zor olurdu. Ancak elbette bir nesnenin bazı durumlarda başka bir nesnenin örneğine yada onun üyelerine erişmesi gerekmektedir.

Burada BP yada nesne iletişiminin en çok kullanılan ve en mantıklı yolu, aslında birbirleri ile etkileştiklerinde iletişim de kurmalarıdır. Bu etkileşimin en yaygın yolu da fiziksel etkileşimdir. Yani bildiğiniz Hit ve Overlap olaylarıdır. A nesnesi bir şeye çarptığında yada onun içinden geçtiğinde onun referansına erişmiş olur. O referansı kullanarak da çarptığı şeyin ne olduğunu anlar(Cast) ve ilgili işlemi yürütür.

furkanxdgs4' Alıntı:
Son olarak, yapay zekalar verinin gitmesi için yapmam gereken şeyi anlamadım. Şurada sorun yaşıyorum; verdiğiniz resimde AI Controller, Pawn sınıfını yöneten bir sınıf. Pawn'dan kasıt yapay zeka bottan bahsediyoruz değil mi? Yani yapay zekanın bulunduğu karakter (Yapay zekayı insanlar için uyguladığımızı düşünelim). Mantıklı, yani bir zeka karar veriyor ve o kararı fiziksel bir karakter görsel olarak uyguluyor. Ancak AI Controller'ı neler yönetiyor veya ne içeriyor? Behaviour Tree, Blackboard gibi mantıksal Blueprint'ler ise bu Blueprint'lere gereken veri akışını nasıl yapacağız? Event Dispatcher'dan yapacağımı söylemişsiniz ancak Event Dispatcher hakkında 1-2 konuya bakmama rağmen herhangi bir fikir edinemedim. Event Dispatcher klasik bir Custom Event'ten farkı nedir ve girilen bilgileri/yapılan eylemleri nasıl diğer Blueprint'lere aktarıyor? Biraz hazırcı gibi oldum çünkü fazla araştırma fırsatı bulamadım ama Unreal Engine'ın kendi Wiki'sini okumama rağmen hiçbir fikir edinemediğimden bu konudaki bilgilerinizi öğrenmek isterim. Yine de tüm yardımlarınız için teşekkür ederim. 
Yapay zeka da oyuncu gibi 2 şekilde vardır. 1. ve olmazsa olmaz olan mantıksal yönetici yani AIController, ikincisi ise onun görsel ve fiziksel temsili olan Pawn(Character de bir Pawn'dır). PlayerController oyuncudan Input bilgisi alır ve Pawn'ı o şekilde yönlendirir. AIController ise mantıksal olarak karar verir ve Pawn'ı o şekilde yönlendirir. Mantıksal karar verme işini de bahsettiğiniz şekilde Behavior Tree yapar. Bunu da Blackboard üzerinde bulunan değişkenleri ve onlara olan uzaklık ve yönleri yorumlayarak yapar. Elbette bu otomatik olarak yapılan birşey değil, burada bir AI Programme gerekli. Daha önce belirttiğim gibi; "eğer Enemy ile aradaki mesafe 100br ise ve tam karşıdaysa ateş et, daha fazlaysa yaklaş"...gibi.
 
Merhabalar, Bence bu konu üzerinde detaylı bir anlatım yapılırsa ve bu konu ve ya buna benzer bir konu üst sıralarda olursa diğer arkadaşlara kolaylık sağlayacaktır çünkü yapay zeka bir çoğunun merak ettiği ve yapmak istediği bir olay yani demem şu dur ki yapay zeka ile ilgili bilgiler bu konu ve ya başka bir belirli konu üzerinden verilirse bir çoğu için kolaylık sağlayacaktır. İyi günler
 
KralArsla10' Alıntı:
Merhabalar, Benim bir sorum olacaktı bu konuyla ilgili projemde böyle bir sistem üzerinde çalışıyorum. Ama ufak bir sorunla karşılaşıyorum. Bu sorun yaptığım yapay zekanın oyuncu karakteri yani düşman olarak göreceği player characteri pawn sensing ile görüyor (AI controller'ın içinde) ama verdiğim komutlar(Behavior Tree) yerine gelmiyor ilgili görseller altta her kodu kontrol ettim fakat sorunun nerede oluştuğunu bulamadım.
Pawn_sensing.png

Projeyi editor de denediğimde tam şu gördüğünüz have enemy? kısmında kırmızı işaretli bir hata gözüküyor yani işlem gerçekleşemiyor hatası gibi ama neden verdiği ile ilgili pek fikrim yok :ı
BehaviorTree.png
Sorunuzu yeni bir konu açarak yazmanız daha mantıklı çünkü bu konu genel fikir ve aydınlatıcı açıklama içeriyor. Direkt olarak sorun çözmeye odaklı bir konu değil yani. Zaten @cahitburak ve @Khubur , forumda aktif olan kullanıcılar yani yeni bir konu açarsan görmeleri mümkün.
Bu arada sayın adminimiz yeni konu açıldığında bu iki iletiyi silerse konunun sadeleği daha da güzelleşecektir diye düşünüyorum.