现在,我正在使用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);
}
有人有什么想法吗?我完全无法解决此问题,在此先感谢您的帮助。
答案 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);
}
}