【发布时间】:2020-03-28 12:56:56
【问题描述】:
我已经遍历了整个故障树,试图诊断这一点,但没有任何乐趣。
我正在用 Unity/C# 编写一个 2D 纸牌游戏。我有四个面板(每个玩家一个),用于保存每个玩家的牌、姓名、弃牌堆等。当用户想要更改选项时,我需要在播放器面板上弹出一个对话框面板。出于某种原因,我无法让弹出窗口出现在卡片精灵上(它确实出现在其他元素上:内部面板、图像、文本框等)。我尝试调整对话框面板的 Zpos,但没有任何变化。这是一个问题,但它会导致一个更令人担忧的问题。
更大的问题是这个。由于选项面板不会显示在玩家卡片的前面,我想我只是停用玩家面板,显示对话框,然后停用它并在关闭时重新激活玩家面板。这很好用:对于三个面板。第四个面板恢复到之前的状态,但其上的图形将不再更新。
我已经调试并发现新卡正在正确处理(精灵名称更改等),丢弃堆正在更新,玩家的名字随着游戏的进展被突出显示/取消突出显示,但没有一个它出现了!它在视觉上停留在我停用它时的状态。
进一步调查,我已经确定,无论我是通过检查器(将这些事件附加到按钮单击)还是通过检查器执行此操作(将这些事件附加到按钮单击),或者在我停用并重新激活该播放器面板时,都会出现错误脚本。我什至不必打开选项对话框:我将 SetActive(false/true) 语句放在我的游戏代码中,它会立即终止该面板的图形更新。精灵、文本等保持在我停用时的状态并且不会更新。
player3Obj.gameObject.SetActive(false)
player3Obj.gameObject.SetActive(true);
对其他三个面板执行此操作没有任何效果并且工作正常。我看不出面板 4 有什么不同。事实上,我只能停用其中一个卡片精灵,当我重新打开它时,它现在“卡住”并且不会更新,即使该玩家的所有其他卡片手会。如果我停用/重新激活其中一个文本字段,则相同。它将不再更新,但其他一切都会更新。
我没有遇到异常错误或任何问题,但这在我看来像是某种内存问题,尽管我无法想象是什么问题。它出现在我的 Android 版本中,不,它不是特定于我的机器的。我提出这个问题,希望有人看到类似的东西。
如果没有别的,也许有人可以告诉我如何让我的选项面板显示在卡片精灵上。但我讨厌留下一个未诊断的问题:他们有办法回来咬人。
更新
这是未显示的代码。 cardBackSprit 值正在正确更新,gameObjectSprite 也是如此,但屏幕上的图像没有改变:
void DrawCardBitmap2(int Player, int cardSpot, int cardIndex)
{
string spriteObjectName;
spriteObjectName = "Sprite_Player" + Player + "_" + cardSpot;
gameObjectSprite = GameObject.Find(spriteObjectName);
gameObjectSprite.GetComponent<SpriteRenderer>().sprite = cardBackSprite;
}
【问题讨论】:
-
在您更新面板的位置显示您的代码。我们无法调试您的话。
-
能否提供停用和重新激活时未更新的面板的所有代码?
标签: unity3d