10oyun yapimi.fw

Unity Dersleri 10 – Space Invaders 4

Önce ki derse buradan erişebilirsiniz.

Bu hafta da geçen haftalarda yapmaya başlayıp devam ettiğimiz Space Invaders oyununa devam edeceğiz.
Öncelikle 8.dersimizde yapmış olduğumuz power up‘ları aktif ederek başlayalım.

Bunun için projemize power up ve power down objelerimizi ve rgba dosyalarını projenin models kısmına import ederek başlayalım.

w1
w2

PowerUp objemizi sürükle bırak tekniğiyle projemize ekliyoruz ve X rotation’unu 90 yapıyoruz. Objemiz fazla büyük olduğu için scale kısmından x,y ve z’yi 0.4′e çekiyoruz.

w3

Ve powerUp objemize rgba rengini ekliyoruz.
RigidBody ve BoxCollider componentlerinide ekleyip RigidBody’den UseGravity özelliğini disable ediyoruz.

BoxCollider‘dan ise Edit Collider diyerek objemize uygun bir dış katman oluşturuyoruz. ve Is Trigger parametresini enable ederek aktifleştiriyoruz, çünkü uzay gemimizin bu objeye dokunduğunda bir trigger görevi görmesini istiyoruz.
Önceden bu componentdan bahsetmiştik. Hatırlamayanlar 3.derse bakabilirler.  

w4
Son olarak objemize ‘powerUp‘ tagını ekliyoruz. Bunu da add tag kısmından ekleyip yapıyoruz.
w5

Oluşturduğumuz objemizi sürükle bırak yaparak prefab klasörümüze aktarıp projemizin scene hiyerarşisinden siliyoruz.

Bu yaptığımız adımların aynısını powerDown objemiz içinde yapıyoruz. Tek fark yaptığımız rengin ona özel rgba rengi olması ve eklediğimiz tag’ın powerDown tagı olması. Linkteki giften yapılışını adım adım izleyebilirsiniz. (Is Trigger özelliğini enable etmeyi unutmayalım.)

w6

Şimdide playercharacter.cs dosyasında oluşturduğumuz bu objelerin işlevleriyle ilgili kodları yazacağız.
void OnTriggerEnter adında collider parametresi alan bir metod oluşturuyoruz.

Uzay gemimiz powerUp taglı bir collider’a denk geldiğinde eğer power değişkenimiz 3den küçükse power’ı 1 arttırıyoruz, powerDown taglı bir collider’a denk geldiğinde ise power değişkeni 1den büyükse power’ı bir azaltıyoruz.

w7
w8

Giftede görüldüğü gibi gemimiz bu objelere denk geldiğinde yapmaya çalıştığımız gibi power özelliğimiz değişiyor artık.
Gemimizin bun objelere değince objelerin ekranda kalmasını istemiyoruz.

Bunun içinde PlayerCharacter class‘ımızda yazmış olduğumuz if’lerin sonuna Destroy(col.gameObject); kodunu ekliyoruz.
Böylece geminin değmiş olduğu objeler oyunumuzdan silinmiş oluyor.

w9
w10

PowerUp ve powerDown objeleri biraz büyük gözüktüğü için scale’lerini 0,4’ten 0,3’e çektikten sonra projemize düşman mermilerini ve istilacıları (düşmanları) eklemeyelim. 

Projemize gerekli olan objeleri ve rgba renklerini models class‘ımıza import ediyoruz.
Import ettikten sonra istilacılarımızı projemize sürükle bırak yaparak ekliyoruz.

Renklerini de ekledikten sonra rotationlarını X’lerini 90, scale’lerini 0,1‘e eşitliyoruz. (Ekranda rahatça görmek istiyorsak position Z’lerini 0’a eşitliyoruz.)

w11

Ve RigidBody ile BoxCollider componentlerini objelerimize ekliyoruz.
RigidBody’nin Gravity parametresini disable ediyoruz ve Constraints kısmından Froze Rotationların hepsini enable ediyoruz ki bir şeye çarptığında objemizin Rotation’u değişip proje ekranımızda dönmesin.

w12

BoxCollider’ı da inviders‘larımızın çevresini saracak şekilde editliyoruz. 
Linkteki gifte hepsini projemize ekledim ve birisi için component’ların nasıl yapılması gerektiğini gösterdim.
Bütün inviders objelerimize aynısını yapıyoruz. 

w13

Bunları yaptıktan sonra Script dosyamızın altına EnemyController class’ını oluşturuyoruz.
İçerisine iki adet public değişken atıyoruz.

Bir tanesi düşman gemilerinin hızları için diğeriyse ne kadar sürede bir yön değiştireceklerini belirlemek için.

w14
w15

Oluşturduğumuz bu yeni component’ı prefabs içindeki inviders objelerimize ekliyoruz. 

w16

Düşman gemilerimizin hareketleri için oluşturduğumuz script dosyasına movement metodu ekliyoruz.
Ondan önce Rigidbody değişkeni tanımlayıp, Start() metodu içinde çekiyoruz.

Çektiğimiz rig değişkenini oluşturduğumuz movement içerisinde yön veriyoruz.
Düşman gemisi karşıdan (yukarıdan aşağıya) geleceği için, Vector3.up ile speed‘i çarpıyoruz.

w17
Oyunumuzu çalıştırıp deneyelim. Speed parametresine bir değer atamayı unutmayalım.
w18

Biz geminin düz olarak inmesini değilde, sağa/sola doğru hareket ederek inmesini istiyoruz.
Bu yüzden movement kodumuzda değişiklik yapıyoruz ve Vector3() şeklinde tanımlayarak koordinat düzleminde hangi yöne hareket etmesini istiyorsak o kısımlara speed veriyoruz.

w19

Aynı zamanda tek yöne değilde düşman gemisinin random olarak her iki yöne de gitmesini istiyorduk.

Bunun içinde boolean bir directionSwitch değişkeni tanımlıyoruz ve Movement() metodumuzda directionSwitch true ise sağ, false ise sol şeklinde aşağıdaki gibi bir if-else yazıyoruz.

w20

DirectionSwitch değişkenimizin zamanla değişmesi için SwitchTimer() adında bir metod tanımlıyoruz.
Önceden tanımlamış olduğumuz changeTimer değişkenimizi bu metoda her girdiğinde changeTimer -= Time.deltaTime; koduyla azaltıyoruz. 

ChangeTimer değişkenimiz 0 ve daha düşük bir sayıya düşerse directionSwitch değişkenimizi true ise false, false ise true‘ya eşitliyoruz.

Bu eşitlemeden sonra changeTimer’ımız 0lanmış oluyor.
Bunun önüne geçip eski değerine atayabilmek için bir tane daha değişken olupturup bunu program başladığında changeTimer’a eşitliyoruz ki değerimiz korunmuş olsun. 

SwitchTimer metodunda bu içine attığımız değişkeni changeTimer‘ımıza eşitliyoruz. Böylece projemiz başladığında changeTimer’ın değeri ne ise ona eşitlemiş oluyoruz.

Ben bu değişkene maxTimer adını verdim.  Unutmadan directionSwith değişkenimizi program başladığında false ya da true herhangi bir değere eşitleyebilirsiniz, null olarak kalmasın yeter ve switchTimer() metodunu Update‘de çağırmayıda unutmayalım. Kodumuzun hepsi aşağıdaki gibi.

w21
w22

Projemizi çalıştırıp kodumuzu deneyelim.
Öncelikle changeTimer parametresine istediğiniz bir değeri verin, ben 2’ye eşitledim.
Speed’i de 150‘ye çıkardım.

w23

Gördüğünüz gibi istilacı gemimiz artık istediğimiz gibi hareket ediyor. Takıldığınız bir yer varsa yorum da sorabilirsiniz. 🙂

Bu eğitim seti Kaynak tarafından oluşturulmuştur. İletişim Maili: Mail 

İletişim: admin@herseymi.com
Yazı oluşturuldu 110

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Benzer yazılar

Aramak istediğinizi üstte yazmaya başlayın ve aramak için enter tuşuna basın. İptal için ESC tuşuna basın.

Üste dön