Birlik için 2D Yakın Dövüş Saldırısı Eğitimi
Unity Motor, hem 2D hem de 3D oyunlar oluşturmak için kapsamlı bir platform sağlar. Pek çok aksiyon oyununun temel unsurlarından biri yakın dövüş saldırısıdır. 2 boyutlu bir ortamda, bu tür bir saldırı genellikle bir karakterin silah sallamasından veya yumruk atmasından oluşur ve Unity animasyonlar, fizik ve komut dosyası yazma araçlarının bir kombinasyonu kullanılarak gerçekleştirilebilir.
Önkoşullar
- Unity Motor kuruldu ve kuruldu.
- Unity arayüzü ve 2D alanı ile ilgili temel bilgi.
1. Projenin ve Sahnenin Kurulumu
- Yeni bir 2D Unity projesi oluşturun (henüz yapmadıysanız).
- Bir karakter hareketli grafiğini içe aktarın veya oluşturun. Onu sahneye yerleştirin.
2. Yakın Dövüş Saldırısı Animasyonunu Ayarlama
- Proje penceresinde sağ tıklayın ve bir "Animator Controller" oluşturun. Bunu "CharacterAnimator" olarak adlandırın.
- Karakteri seçip animatörü "Animator" bileşenine sürükleyerek bu animatörü karaktere atayın.
- Animasyon penceresini açın. Seçilen karakterle "MeleeAttack" adında yeni bir animasyon oluşturun.
- Basit olması açısından bu saldırının hızlı bir yumruk olduğunu varsayalım. Bu eylemi simüle etmek için karakteri canlandırın.
3. Saldırı Hitbox'ını Oluşturma
- Çocuk olarak karaktere boş bir GameObject ekleyin. Bu saldırı için hitbox görevi görecek.
- Boş GameObject'e ve "Box Collider 2D" ekleyin. Boyutunu ve konumunu, karakterin yumruk sırasında vuracağı yere uyacak şekilde ayarlayın.
- "Active" kutusunun işaretini kaldırarak hitbox'ı devre dışı bırakın. Bu, yalnızca saldırı animasyonu sırasında etkinleşmesini sağlar.
4. Saldırı Mantığını Kodlamak
- yeni bir komut dosyası oluşturun, onu "MeleeAttack" olarak adlandırın ve içine aşağıdaki kodu yapıştırın:
'MeleeAttack.cs'
using UnityEngine;
public class MeleeAttack : MonoBehaviour
{
private Animator animator;
private BoxCollider2D hitbox;
private void Start()
{
animator = GetComponent<Animator>();
hitbox = transform.Find("HitboxGameObjectName").GetComponent<BoxCollider2D>();
}
private void Update()
{
if (Input.GetKeyDown(KeyCode.Space)) // Attack on Space key press.
{
animator.SetTrigger("MeleeAttack");
Invoke("ActivateHitbox", 0.2f); // Activate hitbox after 0.2 seconds.
Invoke("DeactivateHitbox", 0.4f); // Deactivate hitbox after 0.4 seconds.
}
}
void ActivateHitbox()
{
hitbox.gameObject.SetActive(true);
}
void DeactivateHitbox()
{
hitbox.gameObject.SetActive(false);
}
}
- "MeleeAttack" komut dosyasını ana karakter'e ekleyin.
- Hitbox etkinleştirme ve devre dışı bırakma zamanlamalarını animasyon'e göre ayarlayın.
- Hitbox çarpıştırıcısını Hitbox değişkenine atayın.
5. Çarpışmalarla Başa Çıkma
- Düşman oyun nesnelerinin etiketlerini "Enemy" olarak değiştirin.
- yeni bir komut dosyası oluşturun, onu "Hitbox" olarak adlandırın ve içine aşağıdaki kodu yapıştırın:
'Hitbox.cs'
using UnityEngine;
public class Hitbox : MonoBehaviour
{
private void OnTriggerEnter2D(Collider2D collision)
{
if (collision.CompareTag("Enemy"))
{
// Damage or destroy the enemy.
Destroy(collision.gameObject);
}
}
}
- "Hitbox" betiğini hitbox nesnesine ekleyin.
Cevaplanacak Sorular:
- Hitbox, animasyon sırasında ne zaman etkinleştirileceğini nasıl biliyor?: Hitbox, 'MeleeAttack.cs' komut dosyasındaki 'Invoke' işlevi tarafından etkinleştirilir. Zamanlama, saldırının inmesi gereken çerçeveye göre ayarlanabilir.
- Hitbox aynı anda birden fazla düşmanla çarpışırsa ne olur?: Sağlanan 'Hitbox' komut dosyasını kullanarak, hitbox'la çarpışan "Enemy" etiketine sahip her düşman yok edilecektir. Hasarı veya diğer etkileri yönetmek için komut dosyasını ayarlayın.
- Saldırı düğmesi Space tuşundan değiştirilebilir mi?: Evet, 'MeleeAttack.cs' kodunda if ('Input.GetKeyDown(KeyCode.Space)') satırı Space tuşuna basılmasını kontrol eder. Saldırı düğmesini değiştirmek için 'KeyCode.Space' değerini başka bir 'KeyCode' değeriyle değiştirin.
Çözüm
Bu kılavuz Unity'de 2 boyutlu yakın muharebe saldırısı uygulamak için temel bir çerçeve sağlar. Ses efektleri, görsel geri bildirim ekleme ve isabet algılama mantığının iyileştirilmesi gibi geliştirmeler, yakın dövüş saldırısı deneyimini daha da geliştirebilir.