Wie der Titel vermuten lässt, versuche ich ein UI-Panel mit einer GridLayoutGroup
Komponente zur Laufzeit mit Sprites aus dem Resources-Ordner zu füllen. Das Problem besteht darin, dass sich die Sprites nicht automatisch an den Rasterzellen ausrichten, sondern in der Mitte des Bereichs gezeichnet werden.Dynamische Auffüllung variabler Sprites in der Grid-Layoutgruppe
Ich habe den Ansatz here versucht, aber es funktioniert nicht für mich. Hier ist das Skript, das ich an die gui angebracht habe mit dem GridLayoutGroup
:
public class SpriteList : MonoBehaviour
{
public GameObject gridPanel;
public const string sortingLayer = "Foreground";
// Use this for initialization
void Start()
{
Sprite[] spriteArray = Resources.LoadAll<Sprite>("Sprites");
RectTransform gridRT = gridPanel.GetComponent<RectTransform>();
for (int i = 0; i < spriteArray.Length; i++)
{
GameObject cellObject = new GameObject();
cellObject.AddComponent<SpriteRenderer>();
cellObject.GetComponent<SpriteRenderer>().sprite = spriteArray[i];
cellObject.GetComponent<SpriteRenderer>().sortingLayerName = sortingLayer;
GameObject sprite = (GameObject) Instantiate(cellObject);
sprite.transform.SetParent(gridPanel.transform, false);
LayoutRebuilder.ForceRebuildLayoutImmediate(
gridPanel.GetComponent<RectTransform>());
sprite.transform.localScale = new Vector3(30, 30, 1);
}
}
Ändern der Einstellungen des GridLayoutGroup
nicht verändern das Verhalten, das ich überhaupt bin zu sehen.
Da alles ich online sehen scheint darauf hinzudeuten, dass der Schlüssel ist die Linie
sprite.transform.SetParent(gridPanel.transform, false);
, die ich benutze, was bin ich dabei?
Vielen Dank!
Ich habe das versucht und es hat nicht funktioniert (ich habe auch meinen Beitrag aktualisiert, um den neuen Code aufzunehmen). Weißt du, warum das so sein könnte? Vielen Dank! – Rookatu