omer.hatay

Üye
2 May 2019
182
14
18
26
(34) İstanbul Avrupa
Şimdi bu Player Controller veya AI Controller tam olarak nasıl kullanılır, oyunumda nasıl bir yer tutar onu çözemedim. Ben genellikle bu arkadaşları mouse bilgisi efendime söyleyeyim trace yaparken yada get hit location kullanmak için oluşturuyorum. Peki karakterimi veya piyonumu hareket ettirirken bu controller lara nasıl başvurmam gerekiyor. Hareket kodlarını bu controllerların içinde mi tanımlamam gerekiyor? Mesela ben character movement component kullanmıyorum ve hareket kodlarını kendim oluşturuyorum, yani controllerda tanımlı simple move to location veya ai move to locationlar beni ilgilendirmiyor. Ama diğer türlü de hareket kodlamasını karkaterimin veya pawn ımın içinde yapınca sanki bir şeyleri yanlış yapıyormuşum ve bu ilerde başıma bela açacakmış gibi duruyor. Hareket kodlamasını nerde ve nasıl yapmalı, controller sınıfını nasıl kullanmalıyım?
 
İstersen bambaşka bir class ekleyip mesela character movement BP onunla da yapabilirsin. İşini zorlaştırmadığı ve bug yaratmadığı sürece yanlış kullanım yoktur. Player controller in diğer aktörlerden farklı klayve mouse inputlarını alabilmesidir. Bunu diğer aktörlere de yaptırabilirsin ama. Örneğim Pawn ve character class ları da input alır kendiliğinden. O yüzden karakter hareketlerini genelde pawn da ya da character aktöründe yapabilirsin. 

Örneğin karakterinin puanı ya da canı var diyelim. Bunu illa player state class ında saklamak zorunda değilsin. Kendin bambaşka bir class yapıp onda da saklayabilirsin. Sadece bu class lar bazı özellikleri kendiliğinden taşıyorlar.

İş multiplayer oyun yapmaya geldiğinde işler değişiyor ama. Replication ve ownership denen şeyler söz konusu. O zaman Unreal'in standart class ları çok iş görüyor. Multiplayer yapmayacaksan ilk başta kafayı doğru mu yapıyorum yanlış mı yapıyorum diye bozma. Kafandakini yapmaya çalış, bugları çöz ve zamanla oyun yapma dilini anlıyorsun. Farkında olmadan çoğu şeyin en risksiz ve güvenli yolunu yapmayı buluyorsun.
 
Öncelikle bu konular ile ilgili 2 sayfaya yakın yazım olması gerekiyordu bu forumda. Ancak şimdi hiç bir şekilde ben bile bulamıyorum ilginç.

PlayerController oyunda oyuncunun kendisini temsil eden tek objedir. Oyuncunun bizzat kendisini yönettiği karakter temsil etmez. Çünkü bu görecelidir. Mesela bir total war oyununda hiç yönetilen karakter yoktur diye biliriz. Bazı oyunlarda yönettiğimiz karakteri her an değiştirebiliyoruz. Bu nedenle yönettiğimiz oyun karakterinden başka şahıs olarak kişiyi temsil eden PlayerController a ihtiyaç duyulmuştur.
 
Bunun eşleniği ise AIController dır. Oda oyunda rakibi temsil eden controller dır. Rakip derken işlemciyi ya da yapay zekayı kastediyoruz. Yoksa multiplayer oyunlarda oyundaki her karakterin gerçek bir playercontroller ı vardır.

Player controller oyuncuyu temsil eder dedik. Bunu şöyle açalım: PC nin başında oyun oynayan kişiyi oyun dünyasındaki yönettiği karakter veya oyun dünyasına bağlayan ilk sanal kod sınıfıdır. Yani oyuncu klavyeden bir tuşa bastığında, mouse a dokunduğunda bu sinyaller önce windowstan oyun penceresine gönderilir. Oyun penceresindeki oyun yazılımına iletilen ilk sinyaller o oyuncuyu temsile eden playercontroller tarafından işlenir. Sonra diğer ilgili yerlere de gönderilir.

PlayerController aynı zamanda bir internet bağlantısını da temsil eder. Multiplayer oyunlarda karakteriniz ölmesine rağmen diğer bilgilerinizin ya da oyununuzun tamamen kopmamasının ya da üzerinde ki envanterin kaybolmamasının sebebi budur.

AIController ise onun bir kardeşidir. Tek farkı player controller ın yaptığı herşeyi AI yani PC karakteri için gerçekleştirmesidir. Yapay zeka karakterler gibi.

Her iki controller da controller isminde bir ata dan türerler. 

Playeri Controller ı hayal ederken oyundaki karakterin kafasında bir çip olarak hayal edin. Bu çip tüm sinyalleri direk olarak yöneten oyuncudan alacak şekilde oyuncuya bağlı. Ve karakterin beynini bu yönetiyor. AI karakterlerin beyninde ise AIController var. Onlar gerçek insanlara değil bilgisayar işlemcisine bağlılar.

Bu bilgiler ışığında oyuncunun klavyesi mouse u monitörü ekran boyutu bakış açısı görüş sahası vb herşey player controller ile direk ilgilidir.

Oyun kontrollerinin character de yapılmasında herhangi bir sıkıntı yok. Sonuçta hareket edecek olan o. Kendi işini kendi yapabilir.

Multiplayer bir oyunda şöyle bir şey yapmaya ihtiyaç duymuştum. Oyunu Multiplayer CounterStrike tarzı düşün. Ama bu robotlarla oynanıyordu. Robotların değişik kabiliyetleri vardı. Bir robotun kabiliyeti rakip takımdan bir robotun beynini ele geçirip 1 dk boyunca diğer takım arkadaşlarına saldırmasını ve o robota sahip olan kişinin o robotun tüm kontrolünü 1 dakika için tamamen kaybetmesini sağlamam gerekiyordu.

Bunu şöyle yaptım. Yetenek uygulandığında hedefteki robotun playercontroller ını çıkartıyordum (unpossess) yerine bir AIController koyuyordum ki bu AIController da Behavior Tree yani yapay zeka çalıştırıyordu. O robottan çıkan payercontroller ı silmiyor bir yerde saklıyordum. 1 dakika sonra AIController ı tekrar söküp olması gereken PlayerController ı tekrar taktığımda o robotun sahibi olan oyuncuya kontroller geri dönüyor ve artık robotuna sahip olabiliyordu.