إنشاء لعبة شبيهة بلعبة Clash of Clans في Unity الجزء الثاني
في هذا الجزء الثاني من سلسلة دروسنا التعليمية، سنطبق آليات القوات للهجوم والدفاع في لعبتنا الشبيهة بلعبة Clash of Clans. سننشئ وحدات من القوات وندير تحركاتها وسلوكها ونسمح للاعبين بنشرها أثناء الهجمات.
إعداد وحدات القوات الجاهزة
أولاً، نحتاج إلى إنشاء نماذج أولية للقوات تمثل وحدات مختلفة في اللعبة.
- قم بإنشاء GameObject جديد لقواتك عن طريق النقر بزر الماوس الأيمن في Hierarchy وتحديد 2D Object > Sprite.
- قم بتسميته Warrior وقم بتعيين شخصية من أصولك.
- قم بإرفاق نص برمجي جديد يسمى Troop للتعامل مع منطق القوات.
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);
}
}
إنشاء مدير القوات
سوف نقوم بإنشاء مدير قوات يتولى نشر القوات وإدارة القوات النشطة في ساحة المعركة.
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);
}
}
}
}
تنفيذ آلية الهجوم
للهجوم، سوف نقوم بإنشاء نظام أساسي حيث يمكن للقوات مهاجمة المباني أو الوحدات الأخرى.
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!");
}
}
}
نشر القوات من واجهة المستخدم
بعد ذلك، سنقوم بإعداد زر واجهة مستخدم بسيط لنشر القوات. في Canvas، قم بإنشاء زر وتعيين وظيفة النشر.
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);
}
}
إضافة دفاع العدو
ولجعل اللعبة أكثر تفاعلية، دعونا ننفذ دفاعات العدو التي ستهاجم القوات.
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);
}
}
خاتمة
في هذا البرنامج التعليمي، قمنا بتنفيذ ميكانيكا القوات الأساسية للهجوم والدفاع في لعبتنا الشبيهة بلعبة Clash of Clans. قمنا بتغطية نشر القوات، والحركة، وسلوك الهجوم، ودفاعات العدو. يمكنك توسيع هذه الميكانيكا بشكل أكبر عن طريق إضافة أنواع القوات، والقدرات الخاصة، وذكاء اصطناعي أكثر تعقيدًا للعدو.