Unity’de Command Pattern Kullanımı

Barış Can Yılmaz
Bursa I/O
Published in
2 min readMay 5, 2021

Merhaba, bu yazımda unity ile geliştirdiğim Color Blocks oyunumda command patterni nasıl kullandığımı anlatacağım.

İlk olarak oyunda command patterni nasıl kullandığımı, nerede ihtiyaç duyduğumu açıklamak istiyorum.

Oyun içerisinde bloklar var ve oyuncunun amacı bu blokları sağa sola sürükleyerek bütün boşlukları doldurmak. Blokların sağa, sola, yukarı ve aşağı sürüklenmesi birer hareket komutu ve bu komutları oyun içerisinde gerektiğinde geri alabilmeliyim. Geri alabilme işlemi için de bütün komutlarımın kayıtlı tutulması gerekmekte.

Command Patternin bize yardımcı olduğu nokta ise eylemleri birer komut nesnesi olarak tutması. Komutları oluştururken gerekli parametreleri verdikten sonra ilgili komutu çalıştırmak için tek yapmamız gereken execute metodunu çağırmak. Komutlar nesne oldukları için istediğimiz gibi onları saklayabiliyoruz.

İlk olarak tüm hareket komutlarını ICommand interfac’inden implemente ediyoruz. ICommand interface’imiz ise içerisinde void tipinde Executeve Undo metotlarına sahip.

Oluşturacağımız hareket komutlarını ICommand interfaceinden implemente edeceğimiz için komutun yapması gereken işlemleri Execute metodunun altında yapacağız. Undo metodunda ise yaptığımız işlemlerin tersini.

Oluşturduğumuz komutun constructerında eylemi gerçekleştirmek için kullanacağımız parametreleri alıyoruz.

Son olarak tüm komutlarımızı tutacağımız ve komutları geri alabilmek için CommandManager sınıfımızı oluşturuyoruz. Sınıfımızın içerisinde ICommand tipinde Stack oluşturarak eklenen komutları burada saklıyoruz.

AddCommand ile parametreden gelen komutu stacke ekliyoruz. UndoCommand ile komutu stackten çekerek Undo metodunu çağırarak yaptığımız işlemi geri alıyoruz.

Uygulama içerisinde kullanımı için command nesnesi oluşturuyoruz ve AddCommand ile stacke ekliyoruz. command.Execute() ile oluşturduğumuz komutu çağırıyoruz. Eğer yaptığımız eylemi geri almak istersek UndoCommand() ile geri alıyoruz.

Sonuç

Kaynak:https://learn.unity.com

Oyun:Color Blocks

LinkedIn|Email|GitHub|Twitter|Medium|BursaIO|Devto

--

--