omer.hatay

Üye
2 May 2019
182
14
18
26
(34) İstanbul Avrupa
AI Controller ile kontrol edilen bir piyonum var. Bu piyonum birde behaviour tree ye sahip. Şimdi olay basit. Piyonumun içinde bir Sphere Collision var ve bu collision ın içerisine Player_BP giriş yaparsa, blackboard da ki "IsTargetClose" değeri "True" olacak. https://i.hizliresim.com/P5Z4RD.png
Buraya kadar herşey normal görünüyor, ama ben Player_BP ile bu yapay zekaya sahip arkadaşı yokettiğim zaman, EndOverlap eventinden sonra kullandığım blackboard fonksiyonları hata veriyor.
https://i.hizliresim.com/Y1NkYz.png


Sanıyorum ki hata piyon yok olduktan sonra End Overlap eventinin bir kere daha çalışması. Piyon yok olduktan sonra blackboard a erişim sağlamaya çalışıyor olabilirim. Bunun önüne geçmek içinse, End Overlap eventinin başına piyonun canının "0" dan küçük olup olmamasını kontrol eden bir branch ekledim. Eğer can "0" dan küçük veya eşit ise hiçbir şey yaptırmıyorum.
 
omer.hatay' Alıntı:
AI Controller ile kontrol edilen bir piyonum var. Bu piyonum birde behaviour tree ye sahip. Şimdi olay basit. Piyonumun içinde bir Sphere Collision var ve bu collision ın içerisine Player_BP giriş yaparsa, blackboard da ki "IsTargetClose" değeri "True" olacak. https://i.hizliresim.com/P5Z4RD.png
Buraya kadar herşey normal görünüyor, ama ben Player_BP ile bu yapay zekaya sahip arkadaşı yokettiğim zaman, EndOverlap eventinden sonra kullandığım blackboard fonksiyonları hata veriyor.
https://i.hizliresim.com/Y1NkYz.png


Sanıyorum ki hata piyon yok olduktan sonra End Overlap eventinin bir kere daha çalışması. Piyon yok olduktan sonra blackboard a erişim sağlamaya çalışıyor olabilirim. Bunun önüne geçmek içinse, End Overlap eventinin başına piyonun canının "0" dan küçük olup olmamasını kontrol eden bir branch ekledim. Eğer can "0" dan küçük veya eşit ise hiçbir şey yaptırmıyorum.



    Yok ettiğin bir şeyin blackboard unda değişiklik yapmaya çalışıyıorsun gibi duruyor. Buna neden gerek var? Yapmaya çalıştığın şey nasıl bir şey anlatır mısın? Çünkü mantık hatası var gibi duruyor. İkinci olarakta piyonun canı 0 dan küçükse demişsin. Burayı anlayamadım. Piyonun null olup olmadığını kontrol edersin normalde. Başka bir durum mu var orda. Can diye bir değişken mi yaptın? Biraz daha açıklayıcı bilgi verirsen yardımcı olabilirim. Özellikle ulaşmak istediğin sonucu yazarsan daha iyi olur.
 
erginegider' Alıntı:
omer.hatay' Alıntı:
AI Controller ile kontrol edilen bir piyonum var. Bu piyonum birde behaviour tree ye sahip. Şimdi olay basit. Piyonumun içinde bir Sphere Collision var ve bu collision ın içerisine Player_BP giriş yaparsa, blackboard da ki "IsTargetClose" değeri "True" olacak. https://i.hizliresim.com/P5Z4RD.png
Buraya kadar herşey normal görünüyor, ama ben Player_BP ile bu yapay zekaya sahip arkadaşı yokettiğim zaman, EndOverlap eventinden sonra kullandığım blackboard fonksiyonları hata veriyor.
https://i.hizliresim.com/Y1NkYz.png


Sanıyorum ki hata piyon yok olduktan sonra End Overlap eventinin bir kere daha çalışması. Piyon yok olduktan sonra blackboard a erişim sağlamaya çalışıyor olabilirim. Bunun önüne geçmek içinse, End Overlap eventinin başına piyonun canının "0" dan küçük olup olmamasını kontrol eden bir branch ekledim. Eğer can "0" dan küçük veya eşit ise hiçbir şey yaptırmıyorum.



    Yok ettiğin bir şeyin blackboard unda değişiklik yapmaya çalışıyıorsun gibi duruyor. Buna neden gerek var? Yapmaya çalıştığın şey nasıl bir şey anlatır mısın? Çünkü mantık hatası var gibi duruyor. İkinci olarakta piyonun canı 0 dan küçükse demişsin. Burayı anlayamadım. Piyonun null olup olmadığını kontrol edersin normalde. Başka bir durum mu var orda. Can diye bir değişken mi yaptın? Biraz daha açıklayıcı bilgi verirsen yardımcı olabilirim. Özellikle ulaşmak istediğin sonucu yazarsan daha iyi olur.



Olayı çözdüm. AI_Controller ile kontrol edilen bir piyonum ve bir behaviour tree im var. Bu kontrol edilen piyonumun içerisinde bir collision var ve bu collision içerisine Player_BP giriş yapınca blackboard da değişiklik yapıyorum. Set Value As Bool mesela. Bu kontrol edilen piyonu, Player_BP, kontrol edilen piyonun collisionının içerisindeyken yok edince, son bir kez collisionın END_OVERLAP eventi çalışıyor. https://i.hizliresim.com/P5Z4RD.png Destroy Actor çalıştıktan sonra son bir kez çalıştığı için (SANIRIM), Destroy Actor ile beraber yok edilen blackboard ile ilgili bir fonksiyona erişmeye çalışıyordum. Bunu nasıl çözecektim? Piyonumun SetHealth isminde bir fonksiyonu var ve canı, her hasar aldığında düşürüyor. Eğer canı 0 dan küçük ise Destroy Actor çalışıyor. İşte o END_OVERLAP eventinin yanına bir sorgu ekledim. Sorgu "eğer can 0'dan küçük veya eşit değil ise" dir. Böylelikle, can 0 dan düşük olduğunca END_OVERLAP ten sonra çalışan kodlar çalışmayacak ve canın 0'dan düşük olması sebebi ile çalışan destroy actor fonksiyonu ile yok olan blackboard a erişim sağlamaya çalışmamış olacağım. 

Bütün bunları bir kenara bırakırsak, zaten behaviour tree ve blackboardu sildim. Yapay zeka sistemini şu anlık kullanmayacağım. Klasik yöntemler ile düşman piyonu hareket ettireceğim. Teşekkür ederim ilgin için.
 
omer.hatay' Alıntı:
erginegider' Alıntı:
    Yok ettiğin bir şeyin blackboard unda değişiklik yapmaya çalışıyıorsun gibi duruyor. Buna neden gerek var? Yapmaya çalıştığın şey nasıl bir şey anlatır mısın? Çünkü mantık hatası var gibi duruyor. İkinci olarakta piyonun canı 0 dan küçükse demişsin. Burayı anlayamadım. Piyonun null olup olmadığını kontrol edersin normalde. Başka bir durum mu var orda. Can diye bir değişken mi yaptın? Biraz daha açıklayıcı bilgi verirsen yardımcı olabilirim. Özellikle ulaşmak istediğin sonucu yazarsan daha iyi olur.

Olayı çözdüm. AI_Controller ile kontrol edilen bir piyonum ve bir behaviour tree im var. Bu kontrol edilen piyonumun içerisinde bir collision var ve bu collision içerisine Player_BP giriş yapınca blackboard da değişiklik yapıyorum. Set Value As Bool mesela. Bu kontrol edilen piyonu, Player_BP, kontrol edilen piyonun collisionının içerisindeyken yok edince, son bir kez collisionın END_OVERLAP eventi çalışıyor. https://i.hizliresim.com/P5Z4RD.png Destroy Actor çalıştıktan sonra son bir kez çalıştığı için (SANIRIM), Destroy Actor ile beraber yok edilen blackboard ile ilgili bir fonksiyona erişmeye çalışıyordum. Bunu nasıl çözecektim? Piyonumun SetHealth isminde bir fonksiyonu var ve canı, her hasar aldığında düşürüyor. Eğer canı 0 dan küçük ise Destroy Actor çalışıyor. İşte o END_OVERLAP eventinin yanına bir sorgu ekledim. Sorgu "eğer can 0'dan küçük veya eşit değil ise" dir. Böylelikle, can 0 dan düşük olduğunca END_OVERLAP ten sonra çalışan kodlar çalışmayacak ve canın 0'dan düşük olması sebebi ile çalışan destroy actor fonksiyonu ile yok olan blackboard a erişim sağlamaya çalışmamış olacağım. 

Bütün bunları bir kenara bırakırsak, zaten behaviour tree ve blackboardu sildim. Yapay zeka sistemini şu anlık kullanmayacağım. Klasik yöntemler ile düşman piyonu hareket ettireceğim. Teşekkür ederim ilgin için.
O zaman bilgi olsun diye yazayım. Garbage collector diye bir şey var. Sen destroy actor yaptığında hemen yok etmiyor. Sıraya alıyor. Sırası gelince destroy yapıyor. Buda bir zamana sebep olabiliyor. Bunun normal şartlar altında null check yani "is valid" operatörü ile yapabilirsin. Ancak sen zaten başka bir yol bulmuşsun. Kolay gelsin.