I’m trying to set an inventory system on my canvas that sets an inventory size and gives it a certain number of slots, which should be positioned in a grid.
The inventory sizes itself correctly and instantiates the appropriate number of slots, but they all appear at some seemingly random point outside my canvas at the same place., like so:
I set the pivot points and anchors of both the inventory and the slots to the top left.
My code for the Inventory script is:
public class Inventory : MonoBehaviour
{
private RectTransform inventoryRect;
private float inventoryWidth, inventoryHeight;
public int slots;
public int rows;
public float slotPaddingLeft, slotPaddingTop;
public float slotSize;
public GameObject slotPrefab;
private List<GameObject> allSlots;
// Use this for initialization
void Start()
{
CreateLayout();
}
// Update is called once per frame
void Update()
{
}
private void CreateLayout()
{
allSlots = new List<GameObject>();
inventoryWidth = (slots / rows) * (slotSize + slotPaddingLeft) + slotPaddingLeft;
inventoryHeight = rows * (slotSize + slotPaddingTop) + slotPaddingTop;
inventoryRect = GetComponent<RectTransform>();
inventoryRect.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, inventoryWidth);
inventoryRect.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, inventoryHeight);
int columns = slots / rows;
for (int y = 0; y < rows; y++)
{
for (int x = 0; x < columns; x++)
{
GameObject newSlot = (GameObject)Instantiate(slotPrefab);
RectTransform slotRect = newSlot.GetComponent<RectTransform>();
newSlot.name = "Slot";
newSlot.transform.SetParent(this.transform.parent);
slotRect.localPosition = inventoryRect.localPosition + new Vector3(slotPaddingLeft * (x + 1) + (slotSize * x), -slotPaddingTop * (y + 1) - (slotSize * y));
slotRect.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, slotSize);
slotRect.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, slotSize);
allSlots.Add(newSlot);
}
}
}
}