Unity'de Clash of Clans benzeri bir oyun oluşturma Pt. 2

eğitim serimizin bu ikinci bölümünde, Clash of Clans benzeri oyunumuzda saldırı ve savunma için birlik mekaniklerini uygulayacağız. Birlik birimleri oluşturacağız, hareketlerini ve davranışlarını yöneteceğiz ve oyuncuların saldırılar sırasında bunları konuşlandırmasına izin vereceğiz.

Birlik Prefabriklerinin Kurulumu

Öncelikle oyundaki farklı birlikleri temsil eden birlik prefabrikleri oluşturmamız gerekiyor.

  1. Birliğiniz için yeni bir GameObject oluşturmak için Hiyerarşi'a sağ tıklayın ve 2D Nesne > Sprite'u seçin.
  2. Adını Savaşçı koyun ve varlıklarınızdan bir sprite atayın.
  3. Birlik mantığını yönetmek için Troop adında yeni bir betik ekleyin.
using UnityEngine;

public class Troop : MonoBehaviour
{
    public float movementSpeed = 2f;
    public int damage = 10;
    public float attackRange = 1f;
    private GameObject target;

    void Update()
    {
        if (target != null)
        {
            MoveTowardsTarget();
        }
    }

    public void SetTarget(GameObject newTarget)
    {
        target = newTarget;
    }

    private void MoveTowardsTarget()
    {
        float step = movementSpeed * Time.deltaTime;
        transform.position = Vector2.MoveTowards(transform.position, target.transform.position, step);

        if (Vector2.Distance(transform.position, target.transform.position) < attackRange)
        {
            Attack();
        }
    }

    private void Attack()
    {
        // Logic for attacking the target
        Debug.Log("Attacking " + target.name);
    }
}

Bir Birlik Yöneticisi Oluşturma

Savaş alanındaki birliklerin konuşlandırılmasını ve aktif birliklerin yönetimini üstlenecek bir Birlik Yöneticisi yaratacağız.

using System.Collections.Generic;
using UnityEngine;

public class TroopManager : MonoBehaviour
{
    public GameObject troopPrefab;
    private List activeTroops = new List();

    public void DeployTroop(Vector3 position)
    {
        GameObject troopObject = Instantiate(troopPrefab, position, Quaternion.identity);
        Troop troop = troopObject.GetComponent();
        activeTroops.Add(troop);
    }

    void Update()
    {
        // Here we can handle troop behaviors or remove them if needed
        for (int i = activeTroops.Count - 1; i >= 0; i--)
        {
            if (activeTroops[i] == null)
            {
                activeTroops.RemoveAt(i);
            }
        }
    }
}

Saldırı Mekaniğinin Uygulanması

Saldırı için birliklerin binalara veya diğer birimlere saldırabileceği temel bir sistem oluşturacağız.

using UnityEngine;

public class Building : MonoBehaviour
{
    public int health = 50;

    public void TakeDamage(int damage)
    {
        health -= damage;
        Debug.Log(name + " takes " + damage + " damage.");
        
        if (health <= 0)
        {
            Destroy(gameObject);
            Debug.Log(name + " destroyed!");
        }
    }
}

Kullanıcı Arayüzünden Askerlerin Konuşlandırılması

Sonra, birlikleri konuşlandırmak için basit bir UI düğmesi ayarlayacağız. Canvas'ta bir düğme oluşturun ve konuşlandırma işlevini atayın.

using UnityEngine;
using UnityEngine.UI;

public class UIManager : MonoBehaviour
{
    public TroopManager troopManager;
    public Button deployButton;

    void Start()
    {
        deployButton.onClick.AddListener(OnDeployButtonClicked);
    }

    private void OnDeployButtonClicked()
    {
        Vector3 deployPosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
        deployPosition.z = 0; // Set z to 0 for 2D
        troopManager.DeployTroop(deployPosition);
    }
}

Düşman Savunması Ekleme

Oyunu daha interaktif hale getirmek için, birliklere saldıracak düşman savunmalarını uygulamaya koyalım.

public class EnemyDefense : MonoBehaviour
{
    public float attackRange = 2f;
    public int damage = 5;
    private Troop target;

    void Update()
    {
        if (target != null)
        {
            if (Vector2.Distance(transform.position, target.transform.position) < attackRange)
            {
                Attack();
            }
        }
    }

    public void SetTarget(Troop newTarget)
    {
        target = newTarget;
    }

    private void Attack()
    {
        // Logic to damage the target troop
        Debug.Log("Attacking troop " + target.name);
        target.TakeDamage(damage);
    }
}

Çözüm

Bu eğitimde, Clash of Clans benzeri oyunumuzda saldırı ve savunma için temel birlik mekaniklerini uyguladık. Birlik konuşlandırmasını, hareketi, saldırı davranışını ve düşman savunmalarını ele aldık. Bu mekanikleri birlik türleri, özel yetenekler ve daha karmaşık düşman yapay zekası ekleyerek daha da genişletebilirsiniz.

Sonraki Adımlar