Här kommer nästa tvåtimmarslektion, där vi tar vårt projekt vidare genom att lägga till mer avancerad interaktion mellan objekt, exempelvis att kombinera objekt eller använda dem för att påverka spelvärlden (t.ex. vapen och fiender). Vi kommer också att förbättra vår UI-upplevelse och lägga till visuella effekter för att ge spelaren bättre feedback.
I denna del kommer vi att skapa ett vapen som spelaren kan använda för att attackera fiender. Vi kommer även att implementera grundläggande fiendelogik där fiender tar skada och till slut försvinner när de blir besegrade.
Skapa en fiendesprite:
Lägg till en Collider och Rigidbody2D:
Skapa ett skript för fiendens hälsa och logik:
Enemy och skriv följande kod för att hantera fiendens hälsa och hur den reagerar på attacker:using UnityEngine;
public class Enemy : MonoBehaviour
{
public int maxHealth = 50;
private int currentHealth;
void Start()
{
currentHealth = maxHealth;
}
// Denna metod kallas när fienden tar skada
public void TakeDamage(int damage)
{
currentHealth -= damage;
if (currentHealth <= 0)
{
Die();
}
}
void Die()
{
Debug.Log("Fienden är besegrad!");
// Lägg till effekter här (t.ex. explosioner, ljud)
Destroy(gameObject); // Ta bort fienden från scenen
}
}
Skapa ett vapenobjekt:
Lägg till vapenlogik:
Weapon och lägg till det på vapnet:using UnityEngine;
public class Weapon : MonoBehaviour
{
public int damage = 20; // Skadan som vapnet gör
void OnTriggerEnter2D(Collider2D other)
{
if (other.CompareTag("Enemy"))
{
Enemy enemy = other.GetComponent<Enemy>();
if (enemy != null)
{
enemy.TakeDamage(damage); // Applicera skada på fienden
Debug.Log("Fienden tog skada!");
}
}
}
}
InventorySlot.cs-skript så att spelaren kan använda vapnet på fiender. Lägg till en logik där vapnet aktiveras när spelaren klickar på det i inventariet.void UseItem()
{
if (item.name == "Sword") // Om objektet är ett svärd
{
Debug.Log("Vapnet har aktiverats!");
// Här kan du aktivera vapnet för att kunna attackera fiender
GameObject weapon = GameObject.Find("Weapon");
if (weapon != null)
{
weapon.SetActive(true); // Aktivera vapnet i spelet
}
}
// Om vapnet används, kan vi behålla det eller ta bort det från inventariet beroende på spelets regler
}
Placera vapnet nära spelaren:
Testa vapnet:
Nu när vi har grundläggande funktioner för fiender och vapen ska vi lägga till bättre visuella och användarmässiga feedbacksystem, så att spelaren får bättre information om vad som händer.
Enemy-skriptet så här:IEnumerator FlashRed()
{
SpriteRenderer renderer = GetComponent<SpriteRenderer>();
if (renderer != null)
{
renderer.color = Color.red; // Ändra färg till röd
yield return new WaitForSeconds(0.1f); // Vänta en kort stund
renderer.color = Color.white; // Återställ till ursprungsfärgen
}
}
public void TakeDamage(int damage)
{
currentHealth -= damage;
StartCoroutine(FlashRed()); // Lägg till visuell feedback när fienden tar skada
if (currentHealth <= 0)
{
Die();
}
}
void OnMouseEnter()
{
transform.localScale = new Vector3(1.1f, 1.1f, 1.1f); // Förstora något när muspekaren är över objektet
}
void OnMouseExit()
{
transform.localScale = Vector3.one; // Återställ till ursprunglig storlek
}
void OnMouseEnter()
{
// Visa en kort beskrivning av objektet
descriptionText.text = "Detta är ett " + item.name;
}
void OnMouseExit()
{
descriptionText.text = ""; // Töm texten när muspekaren lämnar objektet
}
Player- eller HealthManager-skriptet för att minska hälsan när en fiende rör spelaren:void OnTriggerEnter2D(Collider2D other)
{
if (other.CompareTag("Enemy"))
{
// Spelaren tar skada när fienden kolliderar
TakeDamage(10); // Minska hälsan med 10
}
}
public Image damageOverlay;
public void FlashDamageOverlay()
{
StartCoroutine(ShowDamageOverlay());
}
IEnumerator ShowDamageOverlay()
{
damage
Overlay.color = new Color(1, 0, 0, 0.5f); // Halvtransparent röd
yield return new WaitForSeconds(0.2f); // Visa i 0.2 sekunder
damageOverlay.color = new Color(1, 0, 0, 0); // Återställ transparens
}
Nästa lektion kan vi utveckla spelet vidare genom att lägga till mer avancerad fiende-AI, samt kanske även implementera nivåsystem eller utmaningar. Vi kan också fortsätta arbeta med animationer och förbättring av spelupplevelsen.
I nästa lektion kommer vi att:
Vi är på god väg att skapa ett komplett spel med interaktiva objekt, fiender och ett funktionellt inventariesystem!