【发布时间】:2018-10-20 21:53:00
【问题描述】:
我正在尝试创建一个滚动网格视图,其中每个单元格对象都是可点击的。 当一个单元格对象被点击时,我想将其缩放并平移到屏幕的中心并将其渲染到其他单元格之上。 我能够使其可点击并将其缩放到其位置。现在我想将单元格对象移动到屏幕的中心并将其渲染到其他单元格上方。 我尝试了很多解决方案,但没有一个有效。
这是我的层次结构:
这是正常状态的网格:
这是点击单元格时的网格:
我正在从 C# 脚本动态填充网格。
void Populate()
{
GameObject cardContainerInstance, cardInstance;
foreach (var c in cardsCollection.GetAll())
{
if (c.IsOwned)
{
cardContainerInstance = Instantiate(cardContainer, transform);
cardInstance = cardContainerInstance.transform.Find("Card").gameObject;
var cardManager = cardInstance.GetComponent<CardManager>();
cardManager.card = c;
cardManager.AddListener(this);
}
else
{
Instantiate(cardSlot, transform);
}
}
}
public void OnCardClick(GameObject cardObject, Card card)
{
Debug.Log("OnCardClick " + card.name);
if (openedCard != null) {
if (openedCard.Number == card.Number)
{
CloseCard(openedCardObject);
}
else
{
CloseCard(openedCardObject);
OpenCard(cardObject, card);
}
}
else
{
OpenCard(cardObject, card);
}
}
void OpenCard(GameObject cardObject, Card card)
{
//cardObject.GetComponent<Canvas>().sortingOrder = 1;
var animator = cardObject.GetComponent<Animator>();
animator.SetTrigger("Open");
openedCard = card;
openedCardObject = cardObject;
}
void CloseCard(GameObject cardObject)
{
var animator = cardObject.GetComponent<Animator>();
animator.SetTrigger("Close");
openedCard = null;
openedCardObject = null;
}
我不知道如何将单元格移动到中心并将其呈现在其他单元格之上。
请注意,所有内容都是使用附加到对象本身的动画器进行动画处理的。
谁能帮帮我?非常感谢!
编辑:更多细节
所有单元格对象都有以下层次结构:
地点:
- CardContainer 是一个空对象,添加以在 Card 子对象上使用动画器
- 卡片是具有脚本、画布渲染器和动画师的对象本身
- StatsImage 是点击卡片时滑出的对象
- Image 是一个带有 Image 脚本、Shadow 脚本和画布渲染器的 calssic UIImage
- 其他组件是简单的文本。
编辑:修复中
尝试应用this 建议我能够管理渲染顺序(如下图所示),但似乎阻止了在游戏对象上检测到触摸事件。 我也添加了 GraphicsRaycaster,现在底部水平滚动视图再次滚动,但前提是我单击并拖动卡片。 此外,使用GraphicsRaycaster,主网格卡仍然不可点击,只有在底部面板后面才能打开卡片(如果我点击面板后面的卡片下方图像中的红点会收到che click)
这是运行时的 CardContainer(请注意,我在 CardContainer 上附加了新的 Canvas 和 GraphicsRaycaster,这是“根”元素):
【问题讨论】:
标签: unity3d grid-layout translate-animation