BİLGİ [Unity Eğitimi] Basit Bir FPS Oyunu Yapımı - Bölüm 3: Nişan Alma ve Ateş Etme Mekanikleri

187erzGANG Çevrimdışı

187erzGANG

CR | Yönetici
Yönetici
21 Nis 2024
61
2
8
Unity ile FPS Oyunu Yapımı Eğitim Serisi - Bölüm 3'e Hoş Geldiniz!
Bu bölümde karakterimize bir silah ekleyecek ve nişan alma ile ateş etme işlevlerini kodlayacağız. Bu adımlar, oyuna aksiyon eklemek için önemlidir.

1. Silah Modelini Ekleme
Öncelikle, karakterimizin eline bir silah ekleyeceğiz. Bu silah için basit bir silindir veya kutu kullanabiliriz ya da hazır bir silah modelini Unity Asset Store'dan indirebilirsiniz.

Adım 1: Hierarchy panelinde sağ tıklayıp "3D Object > Cube" seçin. Bu, silahımızı temsil edecek.

Adım 2: Küpün boyutlarını silah gibi görünmesi için yeniden ayarlayın. Örneğin, Scale X değerini 0.1, Scale Y değerini 0.1 ve Scale Z değerini 1 olarak ayarlayabilirsiniz.

Adım 3: Küpü "Main Camera" objesinin altına sürükleyerek kameraya sabitleyin. Bu sayede, karakter hareket ederken silah da oyuncuyla birlikte hareket edecek.

---

2. Ateş Etme Mekaniği Kodlama
Ateş etme işlemi için, oyuncunun farenin sol tuşuna bastığında bir ışın (ray) atarak hedefi vurmasını sağlayacağız. Bu ışın, silahın namlusundan ileri doğru çıkarak düşmana ya da hedefe çarpabilir.

Adım 1: "PlayerShooting" adında yeni bir C# script dosyası oluşturun ve aşağıdaki kodları ekleyin:

C#:
using UnityEngine;

public class PlayerShooting : MonoBehaviour
{
    public float damage = 10f;
    public float range = 100f;
    public Camera fpsCam;

    void Update()
    {
        if (Input.GetButtonDown("Fire1"))
        {
            Shoot();
        }
    }

    void Shoot()
    {
        RaycastHit hit;
        if (Physics.Raycast(fpsCam.transform.position, fpsCam.transform.forward, out hit, range))
        {
            Debug.Log(hit.transform.name);

            Target target = hit.transform.GetComponent<Target>();
            if (target != null)
            {
                target.TakeDamage(damage);
            }
        }
    }
}

Açıklama:
- damage: Ateş ettiğimizde verilen hasar miktarı.
- range: Merminin etkili menzili. Bu mesafeyi aşarsa mermi hedeften uzaklaşır.
- Shoot fonksiyonu: Ateş edildiğinde ışın (ray) atar ve karşısına çıkan nesneyi kontrol eder. Eğer hedefin üzerinde Target script'i varsa ona hasar verir.

Adım 2: Bu script'i "Main Camera" objesine ekleyin ve fpsCam alanına "Main Camera" objesini sürükleyin.

---

3. Hedef Nesneler Eklemek
Oyunda vurulabilecek hedefler ekleyelim. Bu hedefler, vurulduklarında hasar alacaklar ve canları tükendiğinde yok olacaklar.

Adım 1: Hierarchy panelinde sağ tıklayıp "3D Object > Sphere" seçin. Bu, hedefimizi temsil edecek.

Adım 2: "Target" adında yeni bir script oluşturun ve aşağıdaki kodları ekleyin:

C#:
using UnityEngine;

public class Target : MonoBehaviour
{
    public float health = 50f;

    public void TakeDamage(float amount)
    {
        health -= amount;
        if (health <= 0f)
        {
            Die();
        }
    }

    void Die()
    {
        Destroy(gameObject);
    }
}

Açıklama:
- TakeDamage: Hedefe hasar veren fonksiyon. Hasar aldıktan sonra sağlığı sıfırın altına düşerse Die fonksiyonunu çağırarak nesneyi yok eder.

Adım 3: "Target" script'ini hedef objesine ekleyin. Böylece, bu hedefe ateş ettiğimizde hasar alacak ve canı bittiğinde yok olacak.

---

4. Efektler ve Ses Eklemek
Ateş etme işlemini daha gerçekçi hale getirmek için bir mermi izi ve ateş sesi ekleyelim.

Ateş Etme Sesi Eklemek İçin Adımlar:
1. Projeye bir ses dosyası ekleyin. Assets panelinde sağ tıklayın, "Import Asset" seçeneğine gidin ve ateş sesi dosyasını ekleyin.
2. "PlayerShooting" script'ine şu eklemeyi yapın:

C#:
public AudioSource gunShotSound;

void Shoot()
{
    gunShotSound.Play();  // Ses oynat
    ...
}

Not: Bu kodu kullanmadan önce PlayerShooting objesine bir AudioSource eklemeyi unutmayın ve eklediğiniz ses dosyasını gunShotSound alanına sürükleyin.

---

Bölüm 3'ün Sonu
Bu bölümde, nişan alma ve ateş etme özelliklerini ekledik. Bir sonraki bölümde, mermi izi ve daha gelişmiş efektler ekleyerek ateş etme mekaniklerini daha da geliştireceğiz.
 

Forum istatistikleri

Konular
158
Mesajlar
271
Kullanıcılar
179
Son üye
crimsonryu
Üst