Kafayı yiyecektim arkadaşlar. Eski Input Manager'dan kurtulup, yeni, şık, event-based Input System paketine geçtiğimde dünyalar benim olmuştu. "Artık her şey InputAction'lar ve harika PlayerInput component'i ile çözülecek, ne güzel!" diye düşünüyordum. Meğerse fırtınadan önceki sessizlikmiş.
Her şeyi kurmuştum. UI için bir Action Map, Gameplay için bir tane daha. PlayerInput component'inden güzelce switch'liyordum. Derken, UI açıldığında karakterim hala zıplamaya, koşmaya devam ediyordu! Meğerse sorun şuradaymış: PlayerInput'un "Auto-switch" ayarı. Bazen currentActionMap'i manuel olarak değiştirmek ve eski map'i Disable etmek gerekiyormuş. StackOverflow'da bile tam çözüm bulamadım, deneye yanıla öğrendim.
C#:
// İşte o sihirli (ve bana saatler kaybettiren) satırlar:
playerInput.SwitchCurrentActionMap("UI");
playerInput.actions.FindActionMap("Gameplay").Disable();
"Tamam" dedim, "map'leri hallettik, şimdi input'ları okuyalım". started, performed, cancelled event'leri süper. Ama Vector2 okurken, mesela bir joystick input'unu, CallbackContext'ten nasıl alacağım? İlk başta hep `context.ReadValue<Vector2>()` diyordum. Ta ki, butona basılı tutma (hold) mekaniği yazana kadar. Şaka gibi ama, `performed` event'i, değer her DEĞİŞTİĞİNDE (örneğin joystick'i hareket ettirdikçe) tekrar tekrar tetikleniyor. Sadece ilk basışı yakalamak için `started` kullanmak gerektiğini anlamam biraz zaman aldı.
Artık şunu anladım: Unity Input System gerçekten güçlü, özellikle cross-platform kontrol ve rebinding için. Ama "plug and play" değil. Action Assets, Input Action References, PlayerInput vs. arasındaki ilişkiyi, hangisinin ne zaman kullanılacağını kavramak kritik. En büyük isyanım ise dokümantasyonun biraz "parçalı" olması. Örnekler harika ama bazen "Neden böyle çalışıyor?" sorusunun cevabı derinlerde saklı.
Siz de Input System'e geçerken benzer sürprizlerle karşılaştınız mı? Mesela UI Toolkit ile entegrasyonda sıkıntı yaşayan oldu mu? Yoksa sizin "Artık anladım!" dediğiniz ama sonra kafanızı duvarlara vurduğunuz başka bir Unity özelliği var mı? Aşağıya yazın, dertleşelim!