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);
}
}