Her PlayerController için bir PlayerState var. O PlayerState in içerisinde istediğin şey var. İsmi PlayerId diye geçiyor. Dökümantasyonu ise burada:
https://docs.unrealengine.com/en-US...ameFramework/APlayerState/PlayerId/index.html
Ancak yukarıda senin de belirttiğin gibi kendin de bir ID sistemi yapıp bunu kullanmayabilirsin. Kafana göre istediğin sistemi kurabilirsin. Soruna gelecek olursak.
2. Sen Pawn da ya da karakter de inputları "WASD" kuruyorsun ancak arka planda playercontroller ın onları senin karakterine yönlendiriyor. Bunun için senin bir şey yapman gerekmiyor. Playercontrollerın olmasaydı o karaktere istediğin kontrolü ata o karakterini hiç bir şekilde yönetemezsin. Zaten playercontrollerın sana bakan yönüyle işi bu değil. PlayerController oyunda oyuncuyu tam olarak temsil eden sınıf. Oynanan karakter değil. Mesela strateji oyunlarını düşün Desperados commandos gibi. Bir sürü karakterin var oyun içinde hepsi sen değilsin. Onlar senin oyun içindeki kuklaların. Seni temsil eden sınıf playercontroller orada. Yada street fighter düşün karşılıklı oynuyorsunuz iki kontrol kuyllanarak. O zamanda birinci oyuncu playercontroller_0 oluyor ikinci playercontroller_1 oluyor. Birbirinden böyle ayırıyorsun.
Pratik manada bunlar benim işime ne yarıyacak diyorsan şöyle söyleyim, bir şeyi replicate yapmak istiyorsan ilk bakacağın yer playercontroller dır. Replication konusunda ne yapacağını bilmiyorsan muhtemelen playercontroller bakman en doğru yerdir. Bu yüzden playercontroller sınıfı açıp baksan sürekli RPC fonksiyonları ve replikasyon kodları görürsün.
Bir de şöyle bir örnek vereyim. Call of Duty gibi bir online oyun düşün. Bunun için Commando diye bir karakter yaptığını düşünelim. Oyun alanında 20 tane oyuncu olsun. Bunların 8 i 10 u Commando olarak oyuna girmiş olabilir. Sen kodda bu karaktere kod ekliyorsun. İstediğin şey çok basit. Bu karakter karşıdaki birini vurduğunda ekrandaki widget UI da vuruş sayısı 1 artsın. Bu çok basit şey online ortamda çok karışabilir. Mesela bu kodu bodoslama yazarsan, diğelim ki sen bir commando karakter oynuyorsun ancak oyundaki diğer 8 commando nunda proxy olarak karakterleri koşturup duruyor. Tamam onları sen kontrol etmiyorsun onlar diğer oyuncular ama bunu kod bilmiyor. Hepsi senin başta yazdığın commando sınıfı karakter ve kod da çalışıyor. Ne olacaktır?
Oyundaki herkesin vuruşları senin ekranına yansıyacaktır. Çünkü onlarda commando sınıfı ve vuruş yapıyorlar.
Sırf bu yüzden , IsLocallyController() diye bir fonksiyon var. Bunu playercontrollerdan çek etmessen senin kontrol ettiğin karakter ile diğer karakterler hepsi aynı muameleyi göreceğinden tüm kod saçmalamaya başlayacaktır. Çünkü bir kişi oyun oynarken kendi bilgisayarında 20 adet playercontroller çalışıyor ama sadece bir tanesi locally controlled player. Yani sensin.
Son olarak. Geçenlerde şöyle bir şey yapmam gerekmişti. 5 e 5 e robotlar savaşıyor online ortamda. Bir tanesine şöyle bir özellik eklemem gerekti:
Robotlardan birisi karşı takımdan birine belli bir yeteneğini (Mind Capture - Beyin ele geçirme ) uyguladığında, 10 saniye liğine o oyuncu tüm kontrolünü kaybedecek, robotun kontrolünü bir AI (yapay zeka) ele geçirecek, önüne gelen dost düşman herkese saldıracak çıldırmış gibi. Sonra 10 saniye sonra etkisi geçecek ve tekrar diğer oyuncunun kontrolü geri gelecek. Bu sırada diğer oyuncu hiç bir şey yapamayacak ve diğer arkadaşlarına robotun nasıl saldırdığını izlemek zorunda kalacak.
Bunun için önce o robotun (karakter sınıfı robot olduğuna bakma) playercontroller ından tüm input yetkisini kaldırıyorum. (Bunu sadece playercontroller dan yapabilirsin.). 10 saniyeliğine hiç bir şey yapamıyoru. Sonra o payercontroller ı vuran kişide bir değişkende 10 saniyeliğine tutuyorum. Bu sırada vurulan robota AIController sınıfından yapay zeka çalıştırına yeni bir Controllerı atıyorum. AIController o robotu (possess ) ele geçiriyor. (Bunu cin ele geçirmesi gibi düşünebilirsin zaten komutun ismi bile öyle - possess) 10 saniye sonunda tuttuğumuz playercontrollerı yeniden o robotu possess yaptırarak kontrollerine izin verdik mi tüm iş tamamlanmış oluyor. PlayerController ı silsem o oyuncuyu yani aynı oyuncuyu o robota tekrar geri veremem.
Mouse un gözükmesi komutunu bile playercontroller dan verebiliyorsun sadece.
Yani böyle işlere yarıyor.
Kolay gelsin.