0

现在我正在Unity3d中开发一个纸牌游戏,我正在尝试将网格布局组用于敌人的手。如果一切都是预先确定的,这可以正常工作,但是当我尝试将卡片动态添加到组时,卡片的位置和大小会发生变化。它应该是这样的: 应该发生什么

这就是实际发生的情况:( 卡存在 屏幕中央的棕色小木板是白板)

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

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

有没有人有任何想法?我完全不知道如何解决这个问题,并提前感谢您的帮助。

4

1 回答 1

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);
        }
    }
于 2018-07-10T13:08:14.267 回答