- Home /
Linking Image to item list
Hi guys, I currently have a button that generates random items to my inventory, currently the script only displays the text of the item and amount but I can't seem to find a way to link a image for each item. What would be the best way to approach this.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class ItemController : MonoBehaviour
{
public static ItemController Instance;
public Item[] availableItems;
public Text itemDisplayText;
void Start()
{
if (Instance!= null)
{
Debug.Log("ItemController - Can only have 1 Instance!");
return;
}
Instance = this;
}
public void GetItem()
{
Item item = availableItems[Random.Range(0, availableItems.Length)];
InventoryController.Instance.AddItemToInventory(new ItemStack(item, 1));
itemDisplayText.text = item.name;
}
}
Item Stack code
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ItemStack
{
public Item item;
public int amount;
public ItemStack(Item item, int amount)
{
this.item = item;
this.amount = amount;
}
}
and this should be the last relevant one
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[System.Serializable]
public class Item
{
public string name;
public Sprite image;
}
Thank You,
I don't fully understand, you already have the field 'Sprite image' in your 'Item' class. This should be totally fine and you should be able to assign the sprites in the inspector. When you build your GUI, where you probably also create UI.Texts for your item names, just also create UI.Images and assign those sprites accordingly.
@nurPunkt$$anonymous$$ichi Yes on my gameobject I can change the name and add a sprite to each name, but it does not display it, I think I need to add something in the first code.
Also the items are generating from a prefab if that helps.
I think the above code is fine, the code where the visual elements are instantiated is probably what has to be extended. You hand the item to the InventoryController in the line InventoryController.Instance.AddItemToInventory(new ItemStack(item, 1));
, and the item contains a reference to the sprite.
Now when you instantiate the GUI elements from a prefab (maybe in InventoryController?), that prefab needs to contain a sprite or UI.Image component for the item image somewhere in its hierarchy. You need to set the sprite property of that component to the item sprite after instantiation. Pretty much the same way you probably change the text of the GUI elements after instantiation.
thx for the quick reply, I do have an image component in the prefab which is first in hierarchy, but the image does not change like the text does even tho on my itemcontroller I have different images for each name.
Here is the inventory script as well
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class InventoryController : $$anonymous$$onoBehaviour
{
public static InventoryController Instance;
public List<ItemStack> inventory;
public Transform scrollList;
public GameObject itemPrefab;
void Start()
{
if (Instance != null)
{
Debug.Log("InventoryController - Can only have 1 Instance!");
return;
}
Instance = this;
inventory = new List<ItemStack>();
}
public void AddItemToInventory(ItemStack stack)
{
bool hasItem = false;
foreach (ItemStack i in inventory)
{
if (i.item.name == stack.item.name)
{
hasItem = true;
i.amount += stack.amount;
GameObject go = scrollList.Find(i.item.name).gameObject;
Text[] prefabText = go.GetComponentsInChildren<Text>();
prefabText[0].text = i.amount.ToString();
return;
}
}
if (!hasItem)
{
inventory.Add(stack);
GameObject go = Instantiate(itemPrefab, scrollList);
go.name = stack.item.name;
Text[] prefabText = go.GetComponentsInChildren<Text>();
prefabText[0].text = stack.amount.ToString();
prefabText[1].text = stack.item.name;
}
}
}
Answer by mlnczk · Nov 16, 2018 at 10:07 AM
I think scriptable objects is the thing you are looking for. Check this video should explain you enough but it will require some changes in your project. https://www.youtube.com/watch?v=aPXvoWVabPY
Your answer
Follow this Question
Related Questions
weighted inventory system 1 Answer
Activate/Deactivate Scripts form another Script 2 Answers
Bullets follow the ship in 2D Space Shooter game 2 Answers
Why does my player not move? 1 Answer
GetComponent won't work 1 Answer