إنشاء لعبة شبيهة بلعبة Clash of Clans في Unity الجزء 3

في هذا الجزء الثالث من سلسلة دروسنا التعليمية h2، سنطبق نظام قتال لتمكين اللاعبين من التفاعل مع لاعبين آخرين أو الذكاء الاصطناعي. ويتضمن ذلك إدارة تفاعلات القوات والصحة والرسوم المتحركة القتالية وميكانيكا المعركة بشكل عام.

تعزيز فئة القوات

نحن بحاجة إلى تعزيز فئة Troop الحالية للتعامل مع القتال بشكل أفضل. سيتضمن ذلك تتبع الصحة والتعامل مع الهجمات من اللاعبين والذكاء الاصطناعي.

using UnityEngine;

public class Troop : MonoBehaviour
{
    public float movementSpeed = 2f;
    public int health = 50; // Added health property
    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()
    {
        // Attack the target
        Building building = target.GetComponent();
        if (building != null)
        {
            building.TakeDamage(damage);
            Debug.Log(name + " attacked " + target.name);
        }
    }

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

إنشاء مدير القتال

سوف نقوم بإنشاء CombatManager الذي سيتولى التعامل مع التفاعلات بين القوات، بما في ذلك اكتشاف متى تكون القوات في نطاق الهجوم وإدارة أهدافها.

using UnityEngine;
using System.Collections.Generic;

public class CombatManager : MonoBehaviour
{
    public List playerTroops;
    public List enemyTroops;

    void Update()
    {
        foreach (Troop troop in playerTroops)
        {
            FindTarget(troop, enemyTroops);
        }

        foreach (Troop troop in enemyTroops)
        {
            FindTarget(troop, playerTroops);
        }
    }

    private void FindTarget(Troop troop, List enemyTroops)
    {
        foreach (Troop enemy in enemyTroops)
        {
            if (Vector2.Distance(troop.transform.position, enemy.transform.position) < troop.attackRange)
            {
                troop.SetTarget(enemy.gameObject);
                return; // Exit after setting the first target
            }
        }

        troop.SetTarget(null); // No target found
    }
}

تنفيذ سلوك الذكاء الاصطناعي

ولجعل القتال أكثر جاذبية، يمكننا تنفيذ سلوكيات الذكاء الاصطناعي الأساسية لقوات العدو.

public class EnemyAI : MonoBehaviour
{
    public float patrolRange = 5f;
    private Vector2 startPosition;

    void Start()
    {
        startPosition = transform.position;
    }

    void Update()
    {
        // Simple patrol logic
        transform.Translate(Vector2.right * Mathf.Sin(Time.time) * Time.deltaTime);

        // Check if the troop is in range to attack
        Troop troop = GetComponent();
        if (troop != null && troop.target == null)
        {
            // Find a new target
            CombatManager combatManager = FindObjectOfType();
            combatManager.FindTarget(troop, combatManager.playerTroops);
        }
    }
}

إنشاء رسوم متحركة للمعركة

لتعزيز المظهر المرئي للقتال، يمكننا إضافة رسوم متحركة بسيطة لقواتنا. يمكنك استخدام مكون Animator في Unity لإعداد رسوم متحركة أساسية للهجوم.

  1. استيراد الرسوم المتحركة لقواتك إلى Unity.
  2. في فئة Troop، قم بإنشاء متغير Animator عام.
  3. قم بتشغيل الرسوم المتحركة أثناء طريقة Attack.
public class Troop : MonoBehaviour
{
    public Animator animator; // Add this line

    private void Attack()
    {
        animator.SetTrigger("Attack"); // Trigger attack animation
        // ... rest of the attack logic
    }
}

إنشاء واجهة مستخدم قتالية

سوف نقوم بتنفيذ واجهة مستخدم بسيطة لعرض أشرطة الصحة للقوات ومعلومات القتال الأخرى ذات الصلة.

  1. في التسلسل الهرمي h7، قم بإنشاء واجهة مستخدم h7 > Canvas h8 جديدة.
  2. أضف عناصر UI > Image لتمثيل أشرطة الصحة لكل فرقة.
  3. استخدم البرنامج النصي لتحديث أشرطة الصحة استنادًا إلى صحة القوات.
using UnityEngine;
using UnityEngine.UI;

public class HealthBar : MonoBehaviour
{
    public Troop troop;
    public Image healthBar;

    void Update()
    {
        float healthPercentage = (float)troop.health / 50; // Assuming max health is 50
        healthBar.fillAmount = healthPercentage;
    }
}

خاتمة

في هذا البرنامج التعليمي، أضفنا نظام قتال يسمح للاعبين بالتفاعل مع لاعبين آخرين أو الذكاء الاصطناعي. لقد قمنا بتنفيذ تفاعلات القوات وإدارة الصحة ورسوم متحركة للقتال وواجهة مستخدم لحالة الصحة. يشكل هذا الأساس لتجربة لعب أكثر تفاعلية واستراتيجية في لعبتك الشبيهة بلعبة Clash of Clans.

الخطوات التالية