Item/Buff Selection UI

Hi. I’m working on a basic 2D platform game like Deadcells. After you beat the boss i want to display a buff selection window which is contains 3 random buffs. Player will choose one of them. These 3 buffs will be chosen randomly among 10 buffs. What is the best way to do this kind of system? Two methods came to my mind.

  1. Buttons on a panel and somehow
    implement randomization
  2. Use Random.Range with list and
    select random sprites

Is there any other logical solution? Thanks.

Example Pic. (10/10 paint ability):
165113-test.png

First you must create the “buffs”, you can use Scriptable Objects to store the data of each buff.

using UnityEngine;

[CreateAssetMenu(fileName = "Buff", menuName = "Buffs/Buff", order = 0)]
public class Buff : ScriptableObject
{
    public Sprite icon;
    public String description;
}

And then with right click in project window you can create a Buff. Let’s createsomething like 10 buffs.

For the ui : Each tile needs to have a image component and a button. and attach a script with a reference to the button and image :

using UnityEngine;
using UnityEngine.UI;


public class Slot : MonoBehaviour
{
    Buff slotBuff;
    Button btn;
    public Image img;


    private void Awake()
    {
        btn = GetComponent<Button>();
        img= GetComponent<Image>();
    }

Make also a setup method in same script :

public void Setup(Buff buff)
    {
        slotBuff = buff
        img.sprite = buff.icon;
        btn.onClick.AddListener(PurchasePlant);
    }

 public void PurchasePlant()
    {
        //Stuff to do when the tile is clicked
    }

Make a prefab of the tile with the script and the components attached and then delete the tiles in you hierarchy.

In an empty game object attach a script who will instantiate the tiles and contains the list of the buffs.

public class BuildManager : MonoBehaviour
{
public Buff [] listBuff; //in inspedctor set the 10 buffs created earlier
public GameObject Slot //In inspector set the prefab here
public Transform slotsContent //In inspector set the parent transform of the tiles

public int numberOfTiles;

private void Start()
    {
        for (int i = 0; i < numberOfTiles; i++)
        {
            GameObject slot = Instantiate(slot, slotsContent.position, Quaternion.identity);
            slot.transform.SetParent(slotsContent);
            slot.GetComponent<ShopSlot>().Setup(listBuff[Random.Range(0, listBuff.Length)].plant);
        }

    }

}

Hope it can help you, may contain some bug code beceause it’s untested but should work :slight_smile:

What is your problem? I can not find a problem were we can help you?