Här kommer nästa tvåtimmarslektion, där vi tar vårt inventariesystem ett steg längre genom att lägga till grafiska ikoner för insamlade objekt, samt att utveckla systemet så att spelaren kan använda eller interagera med objekt i sitt inventory.
I denna lektion kommer vi att:
Skapa eller hämta bilder för objekt:
Lägg till ikoner till insamlingsbara objekt:
Collectible.cs-skriptet. Detta låter oss tilldela en bild för varje objekt.using UnityEngine;
public class Collectible : MonoBehaviour
{
public Sprite itemIcon; // Bild för objektet
void OnTriggerEnter2D(Collider2D other)
{
if (other.CompareTag("Player"))
{
Inventory playerInventory = other.GetComponent<Inventory>();
if (playerInventory != null)
{
playerInventory.AddItem(gameObject); // Skickar hela Collectible-objektet
gameObject.SetActive(false);
}
}
}
}
Collectible.cs.Använd en UI Grid Layout:
Skapa en Prefab för inventarieobjekt:
Uppdatera Inventory Script:
Inventory.cs-skript för att skapa och lägga till ikoner i UI när spelaren plockar upp ett objekt. Lägg till följande kod i Inventory.cs:using System.Collections.Generic;
using UnityEngine;
public class Inventory : MonoBehaviour
{
public List<GameObject> collectedItems = new List<GameObject>();
public GameObject inventoryPanel; // Panel där ikoner visas
public GameObject inventorySlotPrefab; // Prefab för ikoner
public void AddItem(GameObject item)
{
collectedItems.Add(item);
Debug.Log(item.name + " tillagd i inventariet.");
// Skapa en ny ikon i UI
GameObject newSlot = Instantiate(inventorySlotPrefab, inventoryPanel.transform);
newSlot.GetComponent<UnityEngine.UI.Image>().sprite = item.GetComponent<Collectible>().itemIcon; // Tilldela objektets bild
}
}
Nu när vi kan visa ikoner i inventariet, ska vi utveckla systemet så att spelaren kan använda eller släppa objekt från inventariet.
Uppdatera InventorySlot-prefaben:
Skapa ett nytt skript för interaktion:
using UnityEngine;
using UnityEngine.UI;
public class InventorySlot : MonoBehaviour
{
public GameObject item; // Objektet som ikonen representerar
private Button button;
void Start()
{
button = GetComponent<Button>();
button.onClick.AddListener(OnItemClicked); // Lyssna efter klick på ikonen
}
// När spelaren klickar på ikonen
void OnItemClicked()
{
Debug.Log("Använder " + item.name);
// Här kan du lägga till logik för att använda objektet
UseItem();
}
void UseItem()
{
// Exempel: om objektet är en nyckel, öppna en dörr
// Detta kan skräddarsys beroende på objektets funktion
Debug.Log(item.name + " användes.");
// När objektet har använts kan det tas bort från inventariet
Destroy(gameObject);
}
}
Inventory.cs-skriptet så att varje slot också får en referens till det insamlade objektet:GameObject newSlot = Instantiate(inventorySlotPrefab, inventoryPanel.transform);
InventorySlot slotScript = newSlot.GetComponent<InventorySlot>();
slotScript.item = item; // Kopplar objektet till sloten
newSlot.GetComponent<UnityEngine.UI.Image>().sprite = item.GetComponent<Collectible>().itemIcon; // Tilldela objektets bild
Skapa flera insamlingsbara objekt:
Skapa en funktion för att släppa objekt:
InventorySlot.cs kan du också lägga till en knapp eller tangentbindning som låter spelaren släppa objekt från sitt inventarium.void DropItem()
{
Debug.Log("Släpper " + item.name);
// Släpp objektet tillbaka i spelet (placera det vid spelarens position eller en viss plats)
item.gameObject.SetActive(true);
item.transform.position = GameObject.FindGameObjectWithTag("Player").transform.position;
Destroy(gameObject); // Ta bort ikonen från inventariet
}
Nu har vi ett grundläggande system där spelaren kan plocka upp objekt, visa dem som ikoner i ett inventory, och interagera med dem. Vi kan vidareutveckla detta system i nästa lektion, till exempel:
dra och släppa objekt mellan olika platser i inventariet.
I nästa lektion kommer vi att:
Vi är snart klara med ett fullt fungerande system för insamling och interaktion, och vi kan sedan fortsätta med mer avancerade funktioner i spelet!