8oyun yapimi.fw

Unity Dersleri 08 – Space Invaders 2

Önce ki derse buradan erişebilirsiniz.

Önce ki dersimizde space invaders oyununu yapmaya başlamıştık. Bu dersimizde de oyunumuzu yapmaya ve yeni özellikler eklemeye devam edeceğiz.

Öncelikle savaş gemimizin oyun ekranından çıkmaması için limitler ekleyeceğiz.
Bir adet C# script dosyası oluşturalım ve MonoBehaviour özelliğini kaldıralım.

Çünkü component olarak dosyamızı direkt kullanmayacağız, sadece public bir class’a ihtiyacımız var.
Oluşturduğumuz dosyanın içine x ve y koordinatları için maximum ve minimum noktalar belirleyelim.

a1

Oluşturduğumuz bu noktaların serializiable olduğunu göstermek için class’ımızın başına [System.Serializable] yazalım.
Classımızın son hali aşağıdaki gibi olmalı.

a2 1

Sıra geldi limitlerin koordinatlarını belirlemeye.
Öncelikle maplimits class‘ını daha önceden oluşturduğumuz PlayerCharacter class’ında bir type olarak kullanarak variable tanımlayalım. (public MapLimits Limits;) 

Şimdi de değerlerini vereceğiz. Değerler için oyunumuzu açalım.
Artık PlayerCharacter objemizin içinde aşağıda görüldüğü gibi Limits kısmı var.

a3

 Limitlerimiz player character objemizde bu şekilde gözükmeli. 

a4 1

Şimdi de max/min limitlerimizi seçmek için oyunu başlatalım. Aşağıdaki gibi limitlerimizi belirleyebiliriz.

a5

Tanımladığımız bu variable’ı class’ımızın update kısmında kullanalım. Geçen dersimizde de kullanmıştık. 

transform.position = new Vector3(Mathf.Clamp(transform.position.x,Limits.minimumX, Limits.maximumX),Mathf.Clamp(transform.position.y,Limits.minimumY,Limits.maximumY),0.0f);

Böylece haritamızın limitlerinin kontrolünü yapmış olduk.

a6

Friendly Bullet

Bu adımımızda uzay gemimizin mermisini oluşturacağız.
Assets klasörümüzün içerisine yeni bir dosya oluşturarak adını models koyalım ve models dosyamızın içine mermi objemizi ve rgba (rengi) içeren png’mizi import edelim.

Import ettikten sonra sürükle bırak yoluyla objemizi projemize ekleyelim.

a7

Bullet objemizi de scale kısmından küçültelim.

a8

Objemize önceki dersimizde yaptığımız gibi box collider ekleyelim ve boyutlarını edit collider diyerek ayarlayalım.

a9

Bullet’ımıza Rigidbody component‘ını ekleyelim ve seçili olan use gravity özelliğini kaldıralım.

a10

Objemizin untagget olan Tag kısmını değiştirelim ve friendlyBullet şeklinde tag’leyelim.

a11
a12
a13
a14

Son olarak hazırladığımız bullet‘ımızı assets‘in içine bir dosya oluşturarak (prefabs) sürükle bırak yoluyla aktaralım.

a15

Artık elimizde hazırladığımız kalıplara uygun default bir friendly bullet objesi var. Scene‘imizden friendlyBullet objemizi kaldırabiliriz(silebiliriz).

Kaldırdıktan sonra projemize küp objesi ekliyoruz.

a16

Eklediğimiz küpü gemimizin ortasına -tepesinde olacak şekilde- konumlandırıyoruz.

a17

Konumlandırdığımız küpümüzden 2 tane daha duplicate (kopyalayarak) ederek gemimizin her iki tarafına da küpümüzü ekliyoruz.

a18

Küplerimizi player character objemizin içine sürükle bırak yaparak ekliyoruz. Adlarını shoot, shootRight ve shootLeft yapıyoruz.

Küplerimizin içinde bize lazım olmayan Cube (Mesh Filter) ve Box Collider componentlarını aşağıdaki gibi siliyoruz. 

a19
a20
Projemizin ve küplerin son görünümü ;
a21

PlayerCharacter.cs class’ımızın içine gidip pozisyonlarımızı ve bullet’ımızı (mermimizi) variable olarak tanımlıyoruz.

a22

Şimdi de projemizin içine girerek sürükle bırak yöntemiyle objemizin içindeki variable‘ları küpler ve önceden hazırlamış olduğumuz friendlyBullet ile eşleştirelim.

a23

Oluşturduğumuz 3 ayrı ateş etme pozisyonunun oyun başladığında ilk başta kullanılmasını istemiyoruz sadece ortadaki pozisyonun kullanılabilmesini istiyoruz.

Diğer 2 pozisyonun ise (sağ ve sol) oyuncumuz güçlendirici kazandıktan sonra aktif olmasını istiyoruz.
Bunun için  PlayerCharacter class’ımızda power adlı integer bir variable oluşturuyoruz.

Bu power’ımız ateşlediğimiz mermi sayısını temsil ediyor. İkinci bir variable da bu mermimizin hızı için tanımlayalım. Bunun adı da shotPower olsun.

a24

İlk başta power variable’ımız yani ateş sayımız 1 olacağı için projemizin başlangıcında çalışan start() metodunda power‘ımızı 1e eşitliyoruz. 

a25

Şimdide power’ımızın metodunu oluşturalım.
Metodumuzun içinde kaç ateşleyicimizin ne zaman ve nasıl çalışacağını tanımlayalım ve ateşlemek için space (boşluk) tuşunu kullanalım.

Mermimizin x düzleminde yukarı doğru hareket etmesini istiyoruz, bu yüzden velocity özelliğini aktif edip (önceden bu özelliği kaldırmıştık) yukarı doğru hareket etmesini sağlamalıyız. 

Power=1 olduğunda sadece ortadaki, 2 olduğunda yanlardaki ve 3 olduğunda ise hepsinin çalışmasını istiyoruz. 
Bunun için gerekli kodları aşağıdaki gibi yazalım. 

a26
a27

Son olarak Shooting metodumuzun oyun sırasında çağrılabilmesi için Update metodumuzun içinden çağıralım ve playerCharacter objemizin içindeki Shoot Power variable’ına değer verelim.

a28
a29

Eğer her şeyi doğru yapmışsak oyunumuzu çalıştırıp space (boşluk) tuşuna bastığımızda aşağıdaki gibi olması gerekiyor.
Dilerseniz c# script kısmından denemek amaçlı power değerini 2 veya 3 yaparak oyunu çalıştırıp nelerin değiştiğine bakabilirsiniz.

a30

Gelecek hafta oyunumuzu geliştirmeye devam edeceğiz, görüşmek üzere. 🙂

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