יצירת משחק דמוי קלאנס ב-Unity Pt. 3

בחלק השלישי הזה של סדרת ההדרכות שלנו, ניישם מערכת לחימה כדי לאפשר לשחקנים לעסוק בשחקנים אחרים או בינה מלאכותית. זה כולל ניהול אינטראקציות עם חיילים, בריאות, אנימציות לחימה ומכניקת הקרב הכוללת.

שיפור כיתת החיילים

אנחנו צריכים לשפר את הכיתה Troop הקיימת כדי להתמודד טוב יותר עם הקרב. זה יכלול מעקב אחר בריאות וטיפול בהתקפות הן משחקנים והן מ-AI.

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
    }
}

יישום התנהגות AI

כדי להפוך את הלחימה למושכת יותר, אנחנו יכולים ליישם התנהגות AI בסיסית עבור חיילי אויב.

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. ב-Hierarchy, צור UI חדש > Canvas.
  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 שלך.

השלבים הבאים