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ı:
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.