GridLayout или RectTransform Проблемы

Сейчас я работаю над карточной игрой в unity3d и пытаюсь использовать Grid Layout Group для руки врага. Это прекрасно работает, если все предопределено, однако, когда я пытаюсь динамически добавить карту в группу, положение и размер карт меняются. Вот как это должно выглядеть: Что должно произойти

И вот что на самом деле происходит: Карточка бытия(Маленькая коричневая планка в центре экрана - доска)

У меня есть код, чтобы попытаться масштабировать размер и положение до того, каким он должен быть, но, похоже, он не работает.

public void AddCardToOppositeHand(Card card)
    {
        GameObject cardUI = Instantiate(UtilFuncs.GetAssetHolder().card);
        cardUI.GetComponent<CardVisible>().LoadCard(card, false);
        cardUI.transform.SetParent(gameObject.transform, true);

        cardUI.GetComponent<RectTransform>().localScale = new Vector3(0.5f, 0.5f, 1);
        cardUI.GetComponent<RectTransform>().position = Vector3.zero;

        Pair<Card, GameObject> pair = new Pair<Card, GameObject>(card, cardUI);
        AddToDictionary(pair);
    }

У кого-нибудь есть какие-либо идеи? Я полностью застрял на том, как это исправить, и заранее спасибо за любую помощь.

1 ответ

Решение

После некоторой работы я обнаружил, что циклически проходя потомки потомков "руки" и применяя масштабирование и преобразование, похоже, это делается, но не на самом объекте. Понятия не имею почему, но вот код для вас, ребята.

public void AddCardToOppositeHand(Card card)
    {
        GameObject cardUI = Instantiate(UtilFuncs.GetAssetHolder().card);
        cardUI.GetComponent<CardVisible>().LoadCard(card, true);
        cardUI.transform.SetParent(gameObject.transform, true);

        Pair<Card, GameObject> pair = new Pair<Card, GameObject>(card, cardUI);
        AddToDictionary(pair);

        reSizeHand();
    }

    public void reSizeHand()
    {
        for (int i = 0; i < transform.childCount; i++)
        {
            transform.GetChild(i).GetComponent<RectTransform>().localScale = new Vector3(0.5f, 0.5f, 1);
            transform.GetChild(i).GetComponent<RectTransform>().localPosition = new Vector3(transform.GetChild(i).GetComponent<RectTransform>().localPosition.x, transform.GetChild(i).GetComponent<RectTransform>().localPosition.y, 0);
        }
    }
Другие вопросы по тегам