Unity卡牌游戏开发求助:随机显示单张卡牌出现层级覆盖问题
解决Unity卡牌游戏发牌显示问题的方案
你的代码核心问题是没有在发新牌时隐藏之前显示的卡牌,同时随机索引的硬编码和层级显示逻辑也需要调整,以下是具体修正方案:
代码修改思路
- 发牌前先隐藏所有已存在的卡牌,确保同一时间只显示一张
- 动态适配数组长度生成随机索引,避免硬编码导致的数组越界问题
- 处理UI层级问题,保证当前显示的卡牌在最上层
修改后的完整代码
using UnityEngine; public class DealCard : MonoBehaviour { public GameObject[] dealtCard; private int currentActiveCardIndex = -1; // 记录当前显示的卡牌索引 public void DealMyNewCard() { // 第一步:隐藏所有卡牌 foreach (GameObject card in dealtCard) { card.SetActive(false); } // 第二步:生成合法的随机卡牌索引(从0到数组最后一位) int cardGenerate = Random.Range(0, dealtCard.Length); // 第三步:激活选中的卡牌,并设置为最上层UI dealtCard[cardGenerate].SetActive(true); dealtCard[cardGenerate].transform.SetAsLastSibling(); // 更新当前显示的卡牌索引(可选,方便后续扩展) currentActiveCardIndex = cardGenerate; } }
关键修改点说明
- 遍历隐藏所有卡牌:通过
foreach循环把数组里的所有卡牌先设为非激活状态,彻底解决多张卡牌同时显示、互相遮挡的问题 - 动态随机索引:用
dealtCard.Length代替硬编码的数值,不管数组里有多少张卡牌都能正常工作,还能避免数组越界报错 - UI层级处理:调用
transform.SetAsLastSibling()让当前激活的卡牌自动排到UI层级的最前面,不会被其他卡牌遮挡
额外建议
- 检查你的卡牌UI的
Canvas设置,确保所有卡牌都在同一个Canvas下,Sorting Layer保持一致 - 如果不需要记录当前显示的卡牌,可以删掉
currentActiveCardIndex相关代码
内容的提问来源于stack exchange,提问作者Lortnok
相关产品推荐
相关产品推荐

