Bu durumda önemli nokta PlayerController ve Pawn InputComponenti doğru yapılandırmak. İki ayrı senaryoya göre en doğru iki yöntemden bahsedeyim.
Diyelim ki ilk senaryoda ana menü ayrı bir map ve oyuna başlandığında yeni bir level(map) başlatılıyor ve Pawn kontrolleri devreye giriyor. Böyle bir durumda çözüm basit. Aşağıdaki gibi GameMode, PlayerController, Pawn ve HUD gibi ayrı classlar oluşturmak. Menu, menü ile ilgili sınıfları; X ise oyun içi (GamePlay) ile ilgili sınıfları temsil etmektedir.
MenuGameMode
_MenuPlayerController
_MenuPawn
_MenuHUD...vb
XGameMode
_XPlayerController
_XPawn
_XHUD...vb
Bu tasarım biçimi ile karışıklığın önüne geçilebilir. OpenLevel fonksiyonu, bir "Options" parametresine sahiptir. bu parametreye "? game = PROJEADI.XGameMode - game" değeri verilerek, yüklenecek bölümün XGameMode ile yüklenmesi sağlanır.
Ancak sanıyorum buradaki sorun oyun içerisindeyken "Pause Menu"ye erişildiğinde kaynaklanıyor. Bunun için ise çözüm yukarıdaki yaklaşımı da kullanmakla beraber menüye ve diğer başka şeylere ait kontrollerin XPlayerControler üzerinde yapılandırılması ve Pawn kontrollerinin de Pawn'daki InputComponent üzerinde yapılandırılıp; menüye geçildiğinde Pawn üzerinde bulunan InputComponent'in deaktifleştirilmesiyle çözülebilir.
Sonuç olarak menüye geçildiğinde herhangi bir Actor/Pawn/Character üzerindeki InputComponent deaktifleştirilir, ancak; menü ile ilgili işlemlerin PlayerController üzerinden ve/veya Widget üzerinden kullanılmasına devam edilebilir. Sanıyorum birçoğu PlayerController'dan kalıtım almış yeni bir "class" oluşturmuyor. Öyle yada böyle menüde olup olmamak bir değişkenle kontrol edilmelidir. Tasarım açısından doğru yaklaşım budur. UE4 üzerinde bütün Action/Axis yapılandırmaları statiktir ve ini yapılandırması gerektirir. Aksine gerek de yoktur zaten.
Sanırım Pawn için kontrollerin nasıl Disable edilip PlayerController için edilmeyeceği açık kalmış. Ek olarak belirtme ihtiyacı hissettim. C++ üzerinden düşünerek yazdım ama BP referansına bir bakayım dedim.
https://docs.unrealengine.com/latest/INT/BlueprintAPI/Input/DisableInput/index.html
Referans sayfasında "Disable Input" için dikkat edilirse "Player Controller" girişi boş bırakıldığında söz konusu "Actor" hiç bir "Player Controller" tarafından kontrol edilemiyor.
İkinci olarak da eğer bütün bu örnekler "Single Player" bir oyun için geçerli ise oyunu "Pause" etmek bütün bunların önüne geçecektir. Zaman durduğunda neredeyse oyun içi hiçbir şeyin çalışmıyor olması gerekir, tabi doğru yapıldıysa...