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.
- 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.
- Adını Savaşçı koyun ve varlıklarınızdan bir sprite atayın.
- 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.