GridLayout 或 RectTransform 问题
GridLayout or RectTransform Issues
现在我正在 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);
}
有人有什么想法吗?我完全不知道如何解决这个问题,在此先感谢您的帮助。
经过一些工作,我发现之后循环遍历 "hand" 的子项并应用缩放和变换似乎可以做到这一点,而不是在对象本身上。不知道为什么,但这里还是给你们的代码。
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);
}
}
现在我正在 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);
}
有人有什么想法吗?我完全不知道如何解决这个问题,在此先感谢您的帮助。
经过一些工作,我发现之后循环遍历 "hand" 的子项并应用缩放和变换似乎可以做到这一点,而不是在对象本身上。不知道为什么,但这里还是给你们的代码。
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);
}
}