- Home /
 
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.
Buttons on a panel and somehow implement randomization
Use Random.Range with list and select random sprites
Is there any other logical solution? Thanks.
Example Pic. (10/10 paint ability): 
Answer by Mrintoxx · Aug 10, 2020 at 08:50 AM
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 :)
Answer by GoldenretriverYT · Aug 10, 2020 at 02:11 AM
What is your problem? I can not find a problem were we can help you?
Sorry for the confusion. As I mentioned above I need a buff selection window but i don't know to best way to that. Should i use buttons (1) or sprites (2) or another way? Which solution is the best solution for a item/buff selection UI?
Your answer