יצירת משחק דמוי קלאנס ב-Unity Pt. 2
בחלק השני הזה של סדרת ההדרכה שלנו, ניישם מכניקת כוחות לתקיפה והגנה במשחק דמוי 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 שלנו. סיקרנו פריסת כוחות, תנועה, התנהגות התקפה והגנות של האויב. אתה יכול להרחיב את המכניקה הזו עוד יותר על ידי הוספת סוגי חיילים, יכולות מיוחדות ו-AI מורכב יותר של האויב.