9oyun yapimi.fw

Unity Dersleri 09 – Space Invaders 3

Önce ki derse buradan erişebilirsiniz.

Geçtiğimiz hafta uzay gemimizin mermisini ve mermisinin ‘power up‘ özelliklerini oluşturmuştuk.
Bu dersimizde kaldığımız yerden devam edeceğiz. 

Öncelikle oluşturmuş olduğumuz mermi objemize ses efekti ekleyerek başlayalım haftamıza. Assets klasörümüzün altına ses efektleri için ‘Sounds‘ adında bir dosya oluşturalım.
Bu dosyanın içine mermimizin ses efektini içeren .wav uzantılı dosyamızı ekleyelim.

q1
q2

Başarılı bir şekilde import ettiğimiz sound dosyasını bullet objemizin içine entegre etmek için aşağıdaki adımları tek tek yapalım.
Sağ alt köşeden dilerseniz sesi dinleyebilirsiniz. İsterseniz kendi ses dosyalarınızı da oluşturabilirsiniz.

q3
q4

Yukarıda da göstermiş olduğum gibi PlayerCharacterimizin içine Audio Source componentını ekliyoruz.
Ses dosyamızı da aşağıdaki gifte gösterildiği gibi sürükle bırak yöntemiyle AudioClip parametresine ekliyoruz.

Play On Awake seçeneğini de devre dışı bırakıyoruz, çünkü ses dosyamızın uyanıkken değil de ateş edildiğinde çalmasını istiyoruz. 

q5

Bunu bullet’ımızın içine implemente etmek için AudioSource ve AudioClip’i scriptimizde tanımlıyoruz. (PlayerCharecter.cs)

q6

Daha sonra önceden oluşturmuş olduğumuz Shooting() metodumuzun içinde space’e basıldıktan sonra olacaklar kısmının başına oluşturmuş olduğumuz aSource’un bir metodu olan PlayOneShot metodunu çağırıyoruz ve parametresine de ses dosyamızı koyuyoruz.

q7

Bu aşamadan sonra unity’ye geri dönüyoruz ve oluşturmuş olduğumuz shout sound parametresinin içine ses dosyamızı koyuyoruz. 

q8

Oyunu şimdi çalıştırıp space tuşu ile mermi yolladığınızda ses klibinin sorunsuz bir şekilde çalışması gerekiyor.

Sıra geldi mermiye bastıkça oluşan friendlyBullet(Clone)‘larına.
q9

Bu oluşan clone objeler teorik olarak oyunumuzun 3d düzlemi içerisinde sonsuza kadar gidiyor ve yok olmuyorlar.
Bu da oyunumuz için istemediğimiz bir şey çünkü fazladan cpu kullanımına yol açarak gereksiz kaynak kullanımına sebep oluyor.

Bunun önüne geçmek için unity projemizin içine geri dönelim ve ‘DeathTimer‘ adında yeni bir script dosyası oluşturalım.
Bu script dosyamızın içine nesnemizin kaybolmasını -bir nevi oyunumuzdan silinmesini- sağlamak amacıyla bir timer tanımlayacağız.

q10

Yukarıda da gösterildiği gibi bir adet float timer tanımlayacağız ve update metodunun içerisine objemizi destroy etmesi için gereken kodları yazıyoruz.

Bir nevi objemize bir son kullanma tarihi vermiş oluyoruz.
Her space’e bastığımızda oluşan friendlyBullet objemizin içine DeathTimer component’ını ekliyoruz.

q11
q12

Daha sonrada aşağıdaki gifte görüldüğü gibi Timer parametremize 2sn vererek oyunu çalıştırıyoruz.
Oluşan friendlyTimer (Clone) objelerinin 2sn sonra oyundan silindiğini görebilirsiniz.

q13

Bu kısmı da hallettiğimize göre şimdide mermimizin yok olduğu yerde -veya düşmana vurduğumuz yerde- oluşacak bir efekt eklemeye çalışalım.

Bunu particle efekti ile yapacağız. Projemize aşağıda gösterildiği gibi bir particle systemi ekleyelim.

q14
Particle’ı düzgünce görebilmek için pozisyonlarını aşağıdaki gibi 0,0,0‘a çekelim.
q15

Particle‘ımızın içinde aşağıdaki gifte göstermiş olduğum değişiklikleri yapıyoruz.

q16

Gif biraz uzun o yüzden izlemek istemeyenler için yaptığım değişiklikler:

Emission içerisindeki Rate vver Time’ı 0’a eşitleyelim ve  Bursts kısmında artıya basarak bir satır ekleyelim eklediğimiz satırda sanırım unity’nin sürümüne göre değişen count kısmında min olanı 40 max olan kısmı ise 100 yapalım.
Benim sürümüm yüklü ise count’u random between two constans şeklinde ayarlayıp yapabilirsiniz. 

Shape kısmındaysa şeklimizi sphere’e yapalım ve  Randomize Direction‘u true yapmak için 1‘e eşitleyelim.
Daha sonraysa yukarı çıkarak Particle Systems‘in altında bulunan seçeneklerden Start Size’ı 0.3 yapalım ve Simulation Speed‘i 4‘e eşitleyelim.

Son olarak particle’ımızın rengini değiştirelim. Ben koyu bir kırmızı yapmayı tercih ettim.
Particle’ımızın adını friendlyParticle yapalım ve prepabs dosyamızın içerisine ekleyelim.

q17

Sürükle bırak ile eklemeden önce Looping parametresini disable yapmayı unutmayalım. 
Ben disable’ı sonradan yaptım unuttuğum için.

q18

Dosyamızın içine ekledikten sonra scene içerisindeki friendlyParticle’ı projemizden silebiliriz.

DeathTimer.cs class’ımızın içine girerek -sonuçta bizim bu efektimiz mermimiz yok olurken oluşacak o yüzden deathTimer içine tanımlıyoruz- particle tanımlıyoruz ve mermimizin oyundan silinirken çalışan kodunun içine aşağıdaki gibi kodumuzu yazıyoruz.

q19

Unity’de projemize dönüp friendlyBullet’ımıza bakarsak eğer deathTimer component’inin içine bir particle parametresinin oluştuğunu görebiliriz. Bu parametrenin içine friendlyParticle objemizi ekleyelim.

q20
q21

Projeyi başlatıp bir kaç atış yaparsanız bu seferde friendlyParticle(Clone)‘larının silinmeyip birikmeye başladığını göreceksiniz.

q22

Bunu önlemek için prefabs dosyası içerisindeki friendlyParticle objemize deathTimer ekleyelim ve değerini 3 yapalım.
Ama burdaki problem ise friendlyParticle objemizin içindeki particle metodu.

Bunun önüne geçmek için deathTimer.cs classımızın içerisindeki kodumuza bir kontrol ekliyoruz.

q23
q24

Eklediğimiz bu tek satırlık kontrol, eğer parametremizin içinde particle objesi var ise Instantiate kodunu çalıştırmayı, yoksa da o satırı atlayıp direkt olarak Destroy satırına geçmemizi sağlıyor.

Ve son olarak oyunumuzu friendlyBullet’ın deathTimer’ındaki timer’ı 0.2 yaparak projemizi çalıştırıp deneyebiliriz. Böylece mermilerimizin yok olduğunu ve sparkle’ların oluştuğunu gözlemleyebiliriz.

q25

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