这里是给出的Unity代码的简体中文翻译:

主游戏类:

using System.Collections.Generic;
using System.Collections;
using UnityEngine;
using Unity.VisualScripting;

public class MatchGame : MonoBehaviour
{
    // 卡片预设
    public Card cardPrefab;
    // 网格布局
    [SerializeField] Transform grid;
    // 卡片图标
    [SerializeField] Sprite[] iconSprites;

    // 卡片配对列表
    public List<Sprite> cardPairs = new List<Sprite>();
    // 活动卡片列表
    public List<Card> activeCards = new List<Card>();
    Card cardOne;
    Card cardTwo;

    // 指导面板
    public GameObject instructionsPanel;
    // 胜利面板
    public GameObject winPanel;
    // 输败面板
    public GameObject losePanel;

    // 圈数限制
    private int maxRounds = 3;
    // 当前圈数
    private int roundNum = 0;
    // 成对次数
    int matches = 0;
    int num;
    int requiredMatches;

    void Start()
    {
        // 启动游戏
        StartGame();
    }

    // 准备卡片
    private void PrepareCards()
    {
        // 清空卡片配对列表
        cardPairs.Clear();
        // 根据图标数量计算卡片数量
        for (int i = 0; i < iconSprites.Length / num; i++)
        {
            // 添加两张相同的卡片
            cardPairs.Add(iconSprites[i]);
            cardPairs.Add(iconSprites[i]);
        }

        // Shuffle卡片
        Shuffle(cardPairs);
    }

    // Shuffle卡片
    private void Shuffle(List<Sprite> cardList)
    {
        // 循环交换列表项
        for (int i = cardList.Count - 1; i > 0; i--)
        {
            // 生成随机索引
            int num = Random.Range(0, i + 1);
            // 交换列表项
            Sprite temp = cardList[i];
            cardList[i] = cardList[num];
            cardList[num] = temp;
        }
    }

    // 生产卡片
    private void SpawnCards()
    {
        // 循环生成卡片
        for (int i = 0; i < cardPairs.Count; i++)
        {
            // Instantiate卡片
            Card spawnedCard = Instantiate(cardPrefab, grid);
            // 设置卡片图标
            spawnedCard.SetIcon(cardPairs[i]);
            // 设置卡片对应的MatchGame实例
            spawnedCard.matchGame = this;

            // 添加卡片到活动卡片列表
            activeCards.Add(spawnedCard);
        }
    }

    // 销毁卡片
    private void DespawnCards()
    {
        //oreach活动卡片
        foreach (Card spawnedCard in activeCards)
        {
            // Destroy卡片
            if (spawnedCard != null)
            {
                Destroy(spawnedCard);
            }
        }

        // 清空活动卡片列表
        activeCards.Clear();
    }

    // 设置卡片
    public void SetCard(Card card)
    {
        // 判断卡片是否已被选择
        if (card.selected == false)
        {
            // 展示卡片图标
            card.Show();

            // 判断是否需要设置第一个卡片
            if (cardOne == null)
            {
                // 设置第一个卡片
                cardOne = card;
                return;
            }

            // 判断是否需要设置第二个卡片
            if (cardTwo == null)
            {
                // 设置第二个卡片
                cardTwo = card;
                // 检查卡片是否匹配
                StartCoroutine(CheckCards(cardOne, cardTwo));
                // 重置卡片状态
                cardOne = null;
                cardTwo = null;
            }
        }
    }

    // 检查卡片是否匹配
    IEnumerator CheckCards(Card a, Card b)
    {
        // 等待 0.5 秒
        yield return new WaitForSeconds(0.5f);

        // 判断卡片是否匹配
        if (a.iconShown == b.iconShown)
        {
            // 增加匹配次数
            matches++;
            // 判断是否达成圈数限制
            if (matches >= requiredMatches)
            {
                // 判断是否达成最大圈数限制
                if (roundNum >= maxRounds)
                {
                    // 函数注释
                }
                else
                {
                    // 重置圈数和匹配次数
                    roundNum++;
                    StartRound();
                }
            }
        }
        else
        {
            // 隐藏卡片
            a.Hide();
            b.Hide();
        }
    }

    // 重新开始
    public void PlayAgain()
    {
        // 激活指导面板
        instructionsPanel.SetActive(true);
        // 禁用胜利面板和输败面板
        winPanel.SetActive(false);
        losePanel.SetActive(false);
    }

    // 启动游戏
    public void StartGame()
    {
        // 禁用指导面板
        instructionsPanel.SetActive(false);
        // 初始化圈数和匹配次数
        roundNum = 1;
        StartRound();
    }

    // 启动圈
    private void StartRound()
    {
        // 销毁卡片
        DespawnCards();
        // 初始化参数
        num = 1;
        requiredMatches = 12;
        matches = 0;

        // 判断是否需要调整参数
        if (roundNum == 1)
        {
            num = 3;
            requiredMatches = 4;
        }
        else if (roundNum == 2)
        {
            num = 2;
            requiredMatches = 6;
        }

        // 准备卡片
        PrepareCards();
        // 生产卡片
        SpawnCards();
    }

    // 结束游戏
    private void EndGame()
    {
        // 激活胜利面板
        winPanel.SetActive(true);
    }
}

**卡片对象类:**

```csharp
using UnityEngine;
using UnityEngine.UI;

public class Card : MonoBehaviour
{
    // 卡片图标
    [SerializeField] private Image icon;

    // 卡片隐藏图标
    public Sprite iconHidden;
    // 卡片显示图标
    public Sprite iconShown;

    // 是否已被选择
    public bool selected;

    // 匹配游戏实例
    public MatchGame matchGame;

    // 点击事件
    public void OnMouseDown()
    {
        // 向MatchGame设置卡片
        matchGame.SetCard(this);
    }

    // 设置卡片图标
    public void SetIcon(Sprite s)
    {
        iconShown = s;
    }

    // 展示卡片图标
    public void Show()
    {
        // 向卡片图标赋值
        icon.sprite = iconShown;
        // 设置是否已被选择
        selected = true;
    }

    // 隐藏卡片图标
    public void Hide()
    {
        // 向卡片图标赋值
        icon.sprite = iconHidden;
        // 设置是否已被选择
        selected = false;
    }
}