- 21 Nis 2024
- 54
- 2
- 8
Unity ile FPS Oyunu Yapımı Eğitim Serisi - Bölüm 5'e Hoş Geldiniz!
Bu bölümde, oyunumuz için basit bir düşman yapay zekası (AI) ekleyeceğiz. Düşmanımız, oyuncuyu takip edip saldıracak ve oyuncu ateş ettiğinde hasar alacak.
1. Düşman Karakteri Oluşturma
Öncelikle, düşmanımızın temel modelini oluşturacağız.
Adım 1: Hierarchy panelinde sağ tıklayıp "3D Object > Capsule" seçin ve bu kapsülü "Enemy" olarak adlandırın. Bu, düşman karakterimizi temsil edecek.
Adım 2: Inspector panelinde Capsule Collider ve Rigidbody bileşenlerini kontrol edin. Rigidbody bileşeninde "Constraints" bölümünde, "Freeze Rotation" seçeneklerinin hepsini işaretleyin, böylece düşman hareket ederken devrilmez.
---
2. Düşman AI Script'ini Oluşturma
Düşmanımızın oyuncuyu takip etmesi ve belirli bir mesafeden sonra saldırması için bir yapay zeka (AI) script'i yazacağız.
Adım 1: "EnemyAI" adında yeni bir C# script dosyası oluşturun ve aşağıdaki kodları ekleyin:
Açıklama:
- NavMeshAgent: Unity’de hareket edebilen karakterler için kullanılan bir bileşen. Düşmanın navigasyonunu sağlar.
- attackRange: Düşmanın oyuncuya saldırması için gerekli mesafe.
- Attack fonksiyonu: Düşman, bu fonksiyon ile oyuncuya saldırır. Belirli bir bekleme süresinden sonra tekrar saldırabilir.
- TakeDamage ve Die fonksiyonları: Düşman hasar aldığında canı azalır ve sıfıra düştüğünde yok olur.
Adım 2: Bu script'i "Enemy" objesine ekleyin. Ayrıca player alanına, Hierarchy'deki oyuncu objesini sürükleyerek bağlayın.
---
3. Düşman için NavMesh Hazırlama
Düşmanın haritada düzgün bir şekilde hareket edebilmesi için bir NavMesh kullanmamız gerekecek. NavMesh, karakterlerin oyun dünyasında navigasyon yapmasını sağlar.
Adım 1: Window > AI > Navigation menüsünden "Navigation" penceresini açın. Sahnedeki zemin objesini seçin ve Navigation sekmesinde "Walkable" olarak ayarlayın.
Adım 2: "Bake" butonuna tıklayarak NavMesh’i oluşturun. Böylece, düşman karakterimiz belirlediğimiz alanlarda hareket edebilir.
---
4. Düşmanın Hasar Alması
Düşmana ateş ettiğimizde canının azalması için PlayerShooting script’ini güncelleyeceğiz.
Adım 1: PlayerShooting script'inde mevcut "Target" referansını güncelleyin:
Açıklama: Bu kod, ateş ettiğimiz nesnenin EnemyAI bileşeni olup olmadığını kontrol eder. Eğer düşman karakterine ateş edildiyse TakeDamage fonksiyonunu çağırarak canını azaltır.
---
Bölüm 5'in Sonu
Bu bölümde, oyuna basit bir düşman yapay zekası ekledik. Düşman karakterimiz artık oyuncuyu takip edebiliyor, belirli bir mesafeye geldiğinde saldırabiliyor ve oyuncu tarafından vurulursa canı azalıyor. Bir sonraki bölümde, düşman saldırı animasyonu ve efektleri ekleyerek deneyimi daha da geliştireceğiz!
Bu bölümde, oyunumuz için basit bir düşman yapay zekası (AI) ekleyeceğiz. Düşmanımız, oyuncuyu takip edip saldıracak ve oyuncu ateş ettiğinde hasar alacak.
1. Düşman Karakteri Oluşturma
Öncelikle, düşmanımızın temel modelini oluşturacağız.
Adım 1: Hierarchy panelinde sağ tıklayıp "3D Object > Capsule" seçin ve bu kapsülü "Enemy" olarak adlandırın. Bu, düşman karakterimizi temsil edecek.
Adım 2: Inspector panelinde Capsule Collider ve Rigidbody bileşenlerini kontrol edin. Rigidbody bileşeninde "Constraints" bölümünde, "Freeze Rotation" seçeneklerinin hepsini işaretleyin, böylece düşman hareket ederken devrilmez.
---
2. Düşman AI Script'ini Oluşturma
Düşmanımızın oyuncuyu takip etmesi ve belirli bir mesafeden sonra saldırması için bir yapay zeka (AI) script'i yazacağız.
Adım 1: "EnemyAI" adında yeni bir C# script dosyası oluşturun ve aşağıdaki kodları ekleyin:
C#:
using UnityEngine;
using UnityEngine.AI;
public class EnemyAI : MonoBehaviour
{
public NavMeshAgent agent;
public Transform player;
public float attackRange = 2f;
public float health = 50f;
private bool isAttacking = false;
void Start()
{
agent = GetComponent<NavMeshAgent>();
}
void Update()
{
float distance = Vector3.Distance(player.position, transform.position);
// Oyuncuya belirli bir mesafeden yaklaşıldığında saldır
if (distance <= attackRange && !isAttacking)
{
StartCoroutine(Attack());
}
else if (distance > attackRange)
{
agent.SetDestination(player.position);
}
}
IEnumerator Attack()
{
isAttacking = true;
// Saldırı animasyonu veya hasar işlemleri eklenebilir
yield return new WaitForSeconds(1f); // Saldırı hızı
isAttacking = false;
}
public void TakeDamage(float amount)
{
health -= amount;
if (health <= 0f)
{
Die();
}
}
void Die()
{
Destroy(gameObject);
}
}
Açıklama:
- NavMeshAgent: Unity’de hareket edebilen karakterler için kullanılan bir bileşen. Düşmanın navigasyonunu sağlar.
- attackRange: Düşmanın oyuncuya saldırması için gerekli mesafe.
- Attack fonksiyonu: Düşman, bu fonksiyon ile oyuncuya saldırır. Belirli bir bekleme süresinden sonra tekrar saldırabilir.
- TakeDamage ve Die fonksiyonları: Düşman hasar aldığında canı azalır ve sıfıra düştüğünde yok olur.
Adım 2: Bu script'i "Enemy" objesine ekleyin. Ayrıca player alanına, Hierarchy'deki oyuncu objesini sürükleyerek bağlayın.
---
3. Düşman için NavMesh Hazırlama
Düşmanın haritada düzgün bir şekilde hareket edebilmesi için bir NavMesh kullanmamız gerekecek. NavMesh, karakterlerin oyun dünyasında navigasyon yapmasını sağlar.
Adım 1: Window > AI > Navigation menüsünden "Navigation" penceresini açın. Sahnedeki zemin objesini seçin ve Navigation sekmesinde "Walkable" olarak ayarlayın.
Adım 2: "Bake" butonuna tıklayarak NavMesh’i oluşturun. Böylece, düşman karakterimiz belirlediğimiz alanlarda hareket edebilir.
---
4. Düşmanın Hasar Alması
Düşmana ateş ettiğimizde canının azalması için PlayerShooting script’ini güncelleyeceğiz.
Adım 1: PlayerShooting script'inde mevcut "Target" referansını güncelleyin:
C#:
if (Physics.Raycast(fpsCam.transform.position, fpsCam.transform.forward, out hit, range))
{
EnemyAI enemy = hit.transform.GetComponent<EnemyAI>();
if (enemy != null)
{
enemy.TakeDamage(damage);
}
}
Açıklama: Bu kod, ateş ettiğimiz nesnenin EnemyAI bileşeni olup olmadığını kontrol eder. Eğer düşman karakterine ateş edildiyse TakeDamage fonksiyonunu çağırarak canını azaltır.
---
Bölüm 5'in Sonu
Bu bölümde, oyuna basit bir düşman yapay zekası ekledik. Düşman karakterimiz artık oyuncuyu takip edebiliyor, belirli bir mesafeye geldiğinde saldırabiliyor ve oyuncu tarafından vurulursa canı azalıyor. Bir sonraki bölümde, düşman saldırı animasyonu ve efektleri ekleyerek deneyimi daha da geliştireceğiz!