xWiggle

Yeni üye
3 Şub 2018
23
5
0
(34) İstanbul Avrupa
Merhaba arkadaşlar, küçük bir sorum olacak.
Ufak bir Ai tasarlıyorum, şu anlık ana karaktere gitmekten başka bir şey yapmıyor.

Sorunum haritadaki tüm Ai'leri seçerken "Get All Actors Of Class" kullanımında,
Actors Class girişine Ai Character Class Ref ile giriş yaparsam hata veriyor, Class'ı direkt olarak çalıştırır isem normal çalışıyor. Sebebi nedir aralarındaki fark nedir? 

Hata;
yqj6oj.png


pn2bg0.jpg
 
Merhaba xWiggle,

Oncelikle programlama uzerinden ornek vermek istiyorum.

[code-sh=cpp]
#include <iostream>

class elma
{
public:
float m_Float{4};
};

int main()
{
elma armut;
std::cout << armut.m_Float << std::endl;
}
[/code-sh]

Yukaridaki basit programda elma senin sinifin. Armut ise senin objen. sinifinin icerisinde m_Float adinda bir veri uyesi(data member) var. elma sinifindan armut nesnesini yarattigin zaman icerisindeki seylere kapsulleme yontemine gore(public, protected, private) erisim saglayabilirsin.

Ayni sekilde blueprintler icerisinde MOR olanlar classlar olanlar. Senin yarattigin nesneler de MAVI olanlar. Yani farkini anladiysan bence elmalarla armutlari karistirmayasin ha.

Simdi gelelim gercek cevaba, 
Kullandigin dugum UClassdan katilim almis bir sinif ornegini parametre olarak aliyor. Get Actors Of All Class oyun dunyasinda var olan aktor referanslarini bir aktor dizisi olarak dondurur.  Sinifini secmen gerekiyor. Burada sinif ile nesneyi ayirt etmek.
 
Yani sorunum bütün bir Class'ı referans değil sadece bir objesini göstermek? 
Peki hangi değişken türü ile tüm Class'ı gösterebilirim. Kodumun hiçbir yerinde sabit olmasını istemiyorum açıkçası..
 
xWiggle' Alıntı:
Yani sorunum bütün bir Class'ı referans değil sadece bir objesini göstermek? 
Peki hangi değişken türü ile tüm Class'ı gösterebilirim. Kodumun hiçbir yerinde sabit olmasını istemiyorum açıkçası..

Yeni bir değişken oluştur. Değişken oluştururken obje referansını alacaksın. Bu referans geçersiz(null pointer) olabilir. Eğer referansın daha önceden atanmadıysa ona erişemezsin.

Örnek vermek gerekirse herhangi bir blueprint aktör içeriisnde Game Instance sınıfımın nesne referansı için bir değişken oluşturuyorum. 

image.png


Tekrar söylüyorum, herhangi bir null pointeri de-referans edemezsin, yani daha önceden atamadığın bir nesne referansının içerisine erişirsen hata alırsın.
 
Sanırım anlamaya başladım ancak ben nesneye değil bütün sınıfını değişken olarak alıyorum şu anda, sonrasında sınıftan oluşan nesnelere ulaşıyorum.
Diye düşünüyorum en azından.  :(
Actor Class girişi obje almıyor çünkü.

lZ4gnr.jpg


oVyMB9.jpg


Asıl yapmam gereken önce bir Ai Actor nesnesi oluşturup ondan class'ı çekmek sanırım?
Blackboard'dan SelfActor referansı alıp ondan yapmaya çalıştım başaramadım.

Birde bu işlemin sonunda ekranda 2 tane aktör olmasına rağmen en sonda koyduğum bir Print Screen düğümü 6 kere True döndürüyor onu da çözemedim.  :D
 
xWiggle' Alıntı:
Sanırım anlamaya başladım ancak ben nesneye değil bütün sınıfını değişken olarak alıyorum şu anda, sonrasında sınıftan oluşan nesnelere ulaşıyorum.
Diye düşünüyorum en azından.  :(
Actor Class girişi obje almıyor çünkü.

lZ4gnr.jpg


oVyMB9.jpg


Asıl yapmam gereken önce bir Ai Actor nesnesi oluşturup ondan class'ı çekmek sanırım?
Blackboard'dan SelfActor referansı alıp ondan yapmaya çalıştım başaramadım.

Birde bu işlemin sonunda ekranda 2 tane aktör olmasına rağmen en sonda koyduğum bir Print Screen düğümü 6 kere True döndürüyor onu da çözemedim.  :D

Şu anda yaptığın şey, oyun dünyasındaki bütün AI Character Class Ref sınıfının nesne dizisini dizi olarak alıyorsun. Sonra bu nesne dizisini bir döngü içerisine sokup, Array Element senin nesnen olarak, Array Element nesne içerisinden Get AI Controller düğümünü kullanarak Run Behavior Tree düğümü çalıştırıyorsun. Ne gibi bir mekanizma yaptığının farkında değilim. Bunu almak için illa Get All Actors of Class düğümünü kullanmana gerek yok. Event Dispatcher, Blueprint Interface, hatta oyuncu kutunun üzerine overlap ederse aktörden sınıfa cast edebilirsin.
 
Sadece BehaviorTree'mi her Ai için ayrı ayrı çalıştırmaya çalışıyordum. İlk denememde Ai'lerden sadece bir tanesi hareket etmişti bende bütün nesneleri alıp foreach ile hepsinde çalıştırdım işe yaradı. "Crowd control" ile yaparsam sanırım bir kerede de çalışabilir, ancak henüz araştırmadım.

Bu arada tıpatıp aynı kodu tekrar yazdım şu an hata vermiyor. Neyin değiştiği ile ilgili en ufak bir fikrim yok..
Default value dahi aynı.

moR0W2.jpg