GridLayout或RectTransform问题

时间:2018-07-10 12:51:14

标签: c# user-interface unity3d unity-ui

现在,我正在使用unity3d进行纸牌游戏,并且试图将Grid Layout Group用作敌人的手。如果一切都是预先确定的,这将很好地工作,但是当我尝试将卡片动态添加到组中时,卡片的位置和大小都会改变。 它应该是这样的: What should happen

这是实际发生的事情: Card being (屏幕中央的小棕色木板是木板)

我有代码尝试将大小和位置缩放到应有的程度,但似乎不起作用。

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 个答案:

答案 0 :(得分:0)

经过一些工作,我发现之后循环遍历“手”的子代并应用缩放和变换似乎可以做到,只是不在对象自身上。不知道为什么,但是这还是适合你们的代码。

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