- Home /
Slot Prefab instantiating outside of set parent
I'm working through a tutorial from a few years ago so it's doubtful I'd get any help from the original video, so I turn to you. This script is attached to an image inside of a canvas, inside of another canvas. At this point in the video, the instantiated prefabs are inside of the image, but I must be missing something. I would rather have the prefabs instantiate on a panel, but I'm getting the same results.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Inventory : MonoBehaviour
{
RectTransform inventorySlotRect;
float inventoryWidth, inventoryHeight;
public int slots;
public int rows;
public float slotPaddingLeft, slotPaddingTop;
public float slotSize;
//public Transform InventoryDisplayParent;
public GameObject InventorySlotPrefab;
List<GameObject> allSlotsList;
// Start is called before the first frame update
void Start()
{
CreateInventoryLayout();
}
// Update is called once per frame
void Update()
{
}
void CreateInventoryLayout()
{
allSlotsList = new List<GameObject>();
inventoryWidth = (slots / rows) * (slotSize + slotPaddingLeft) +slotPaddingLeft;
inventoryHeight = rows * (slotSize + slotPaddingTop) + slotPaddingTop;
int collumns= slots/rows;
inventorySlotRect = GetComponent<RectTransform>();
inventorySlotRect.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, inventoryWidth);
inventorySlotRect.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, inventoryHeight);
for(int y=0; y<rows; y++)
{
for(int x=0; x<collumns; x++)
{
GameObject newInventorySlot = (GameObject)Instantiate(InventorySlotPrefab);
RectTransform inventorySlotRect = newInventorySlot.GetComponent<RectTransform>();
newInventorySlot.name = "Slot";
newInventorySlot.transform.SetParent(this.transform.parent);
inventorySlotRect.localPosition = inventorySlotRect.localPosition + new Vector3(slotPaddingLeft * (x + 1) + (slotSize * x), -slotPaddingTop *(y +1)-(slotSize *y)) ;
//inventorySlotRect.transform.SetParent(InventoryDisplayParent);
inventorySlotRect.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, slotSize);
inventorySlotRect.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, slotSize);
allSlotsList.Add(newInventorySlot);
}
}
}
}
Would someone give this a once over and see where the problem lies? All anchor points are set to upper left and I've tried every layout component to no avail. Thanks!
Answer by hirenkatira · May 08, 2021 at 09:47 AM
Hello,
This is probably due to the set parent statement. Please check below
// your current code
newInventorySlot.transform.SetParent(this.transform.parent); // current gameobject's parent
// what it should be to make it child object of the Image/current object
newInventorySlot.transform.SetParent(this.transform); // current gameobject
Your answer
Follow this Question
Related Questions
Multiple Cars not working 1 Answer
Distribute terrain in zones 3 Answers
Connecting Things to Weapon "Open Slot" 0 Answers
Inventory Dragging Item Problem 0 Answers
Inventory "Remove" Function Help 1 Answer