Skip to content

serkanktk/BridgeRace

Repository files navigation

BridgeRace

İlk sahnede toplam 8 adet buton bulunmaktadır. Bunlardan altısı ana karakterin materyalini seçmek içindir. Bunlardan biri müzik düğmesidir. Sonuncusu temel olarak oyun sahnesini başlatmak içindir. Ayrıca kazançların sayısını "DataManager" scripti içerisinde ayarlamış olduğum yerel depolamada saklıyorum.

  1. Toplam kazancın saklanması "DataManager" scriptindeki "Awake()" fonksiyonu ile sağlanır. Kazanç sayısı tekil bir yapıya sahiptir ve oyun kapatıldığında PlayerPrefabs'a "OnApplicationQuit()" yöntemiyle kaydedilir.
  2. Malzeme seçme butonlarının metinleri "void SetText(TextMeshProUGUI, int)" fonksiyonunda başlatılır. Bu işlevi, sahnenin başlatılması sırasında çağrılan yöntem olan "Start()" yönteminde çağırıyorum. Her butonun kendisine bağlı bir numarası vardır. Örneğin kullanıcı altıncı materyalle oynamak istiyorsa en az 80 oyun kazanması gerekiyor. Bu butonların işlevleri "void ThemeOnDecision(int, int)" fonksiyonu ile sağlanmaktadır. Bu malzeme seçme butonlarının fonksiyonlarını "OnClick()" metodu ile çağırıyorum. Kazanç sayısının o materyali seçmek için yeterli olup olmadığını kontrol eder. Yeterliyse "Seçili" yazan bir mesaj görüntülenir. Daha sonra bir sonraki sahnede o materyali seçmek için kullanılacak numarayı saklar. Aksi takdirde, "Kilidi Açıldı" mesajını gösterir, hepsi bu. "ThemeOnDecision"da ayrıca "isSelectedMessageShown" ve "isUnlockedMessageShown" boolean parametreleri sayesinde bir kilitleme işlevi uyguladım. Ekranda 1 saniye süreyle "Kilitsiz" ve "Seçili" mesajları gösterilir. Kullanıcı o anda başka bir tuşa basarsa o tuş devreye girmez. Yani başka bir malzeme seçmek isterse ekrandaki mesajın kaybolmasını beklemek zorunda. Mesajların görüntülenme süresi "IEnumerator ShowMessageForDuration(TextMeshProUGUI, string, float, Action)" işlevinde ayarlanır.
  3. Müzik için, müzik varlığını müzik düğmesine sürükleyip bırakmak mümkün değildi (Buna Unity izin veriyor, ancak hiç de iyi bir teknik değil). Çünkü müzik düğmesi tuvalin alt nesnesidir. Müzik tüm oyun boyunca çalınacağından dolayı bir ana nesneye sahip olmamalıdır. Eğer bir ana nesnesi varsa, o zaman yok edilecektir, çünkü bizim durumumuzda bir tuval olan ana nesnesi bir sonraki sahnede yok edilecektir. Bu nedenle müzik varlığını "MusicManager" nesnesine ekledim. "MusicButtonController" scriptinde müzik butonunun fonksiyonlarını ayarladım; bunlar arasında müzik çalmak, müziği durdurmak ve müzik butonu nesnesinin mevcut durumuna göre butonun varlığını değiştirmek yer alıyor.
  4. Başlat düğmesinin işlevselliği temel olarak "StartOnClick()" işleviyle sağlanır. Bu sadece ikinci sahneyi yüklüyor. İkinci sahnede yok edilmemesi gereken müzik varlıkları veya materyaller gibi diğer nesneler bir sonraki sahneye aktarıldığı için başlat butonu bağlamında ele alınmaz.
  5. İkinci sahneye gelindiğinde toplam 42 blok bulunmaktadır. Bu, her oyuncunun kendisine toplam 14 bloğun bağlı olduğu anlamına gelir. Bu blokların initialize edilmesi, "BlockManager" scriptindeki "Start" metodu içerisinde gerçekleştirilir. Bunun akış şemasını aşağıda görebilirsiniz:

Ekran Görüntüsü (3330)

  1. Sahne başlangıç durumuna getirildikten sonra bilgisayar kontrolünde olan diğer iki karakter, hareket edebilir duruma geliyor. Bu karakterlerin hareketi "AIBallController" scripti içerisinde ki "void MovementMechanics()" fonksiyonu ile sağlanıyor. Karakterin ilk başta blokları toplaması gerekiyor. Rastgelelik katmak amacıyla 7 ile 14 arasında bir sayı oluşturuluyor. Çıkan sayı karakterin kaç tane blok toplaması gerektiğini bildiriyor. Ardından "void MovementMechanics" fonksiyonu içerisinde gereken şartlar sağlandığı takdirde "void CollectBlocks" fonksiyonu çağrılıyor. Bu fonksiyon, karakter etrafında görünmez bir daire oluşturarak en yakın olan bloğa doğru hareket ediyor. Verilen sayıda bloğu topladıktan sonra ise Target1'e ardından ise Target2'ye doğru yol alıyor.
  2. Blokların toplanması, tüm karakterler için aynı şekilde işliyor. Fakat basitleştirmek adına sadece "AIBallController" içerisindeki fonksiyonlardan bahsedeceğim. Karakter bir blok objesi ile temasa geçtiğinde "OnTriggerEnter" metodu içerisinde "void BlockEncounter(Collider)" fonksiyonu çağrılıyor. Bu fonksiyonda ilk olarak karakter ile blok objesinin meteryallerinin aynı olup olmadığı kontrol ediliyor. Ardından temas halindeki bloğun platform üzerinde toplanmamış bir blok olduğundan emin olunuyor. Bu şartlar sağlandığı takdirde bloğun toplanması bekleniyor ve toplama mekaniği devreye giriyor. Diğer durumda, yani blok materyali ile karakter materyalinin aynı olmadığı durumlarda ise blok materyali şeffaf duruma getiriliyor. "OnTriggerExit" içerisinde ise geri eski haline döndürülüyor.
  3. Körü kurma mekaniği, karakter ile köprü objesi etkileşim haline geldiğinde çalışıyor. "OnTriggerEnter" metodu içerisinde"void RopeEncounter(Collider)" fonksiyonu çağrılıyor. Eğer köprü objesi daha önce herhangi bir karakter tarafından aktive edilmemişse ilk olarak köprü materyali, karakterin materyaline eşitleniyor. Ardından köprü materyali "SetActive" ile görünebilir hale getiriliyor. Eğer daha önce başka bir kullanıcı tarafından aktive edilmişse iki durum göz önüne alınıyor. Eğer karakter objesinin ve köprü objesinin materyalleri aynı ise herhangi bir işlem yapılmıyor. Fakat aynı değilse köprü materyali, karakterin materyaline eşitleniyor. Karakter stack'i içerisinde olan son blok objesi çıkartılıyor ve sahne başlangıç pozisyonundaki yerine konuluyor. Rotasyonu ise diğer bloklar ile aynı olacak şekilde yeniden belirleniyor.
  4. Karakterin elinde yeterli blok olmadığı takdirde bir sonraki köprü objesine hareket etmemesi gerekiyor. Karakterin bu hareketini kısıtlamak için ise yine "OnTriggerEnter" metodu içerisinde çağrılan "void LimitEncounter(Collider)" fonksiyonu devreye giriyor. Eğer stack'inde en azından bir blok varsa karakter limit objesinin içerisinden geçebiliyor. Yoksa karaktere aksi yönde bir kuvvet uygulanarak karakter geriye doğru itiliyor.
  5. Karakterler target2 ile etkileşime geçtiğinde 2 durum var. Bu durumların sağlanması "RotateFinalTarget" scripti içerisindeki "OnTriggerEnter" metodunda gerçekleşiyor. Eğer etkileşim haline giren ana karakter ise "totalWinnings" değişkeni bir arttırılıyor. Ardından kullanıcı, ikinci sahneye yönlendiriliyor. Eğer etkileşim halinde olan diğer iki karakter ise oyuncu direkt olarak ikinci sahneye aktarılıyor.

Bu linkten oyuna ulaşabilirsiniz: https://youtu.be/2cuY6srQncI?si=T7GsBtu62AG5i8vq

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published