You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 11:30:50