unity3d-学习笔记16-卡牌游戏制作(修复人物和boss血量的bug以及循环出牌的功能)
发布日期:2021-05-08 12:34:05 浏览次数:18 分类:精选文章

本文共 2023 字,大约阅读时间需要 6 分钟。

卡牌游戏制作(部分功能的优化)

问题一:修复血量异常

问题描述

在游戏中发现,部分卡牌(如BOSS或特定角色)的血量在超过预设值后,仍然没有保持在预设值而是继续增加。这种现象会导致游戏异常,影响玩家体验。

解决思路

通过在代码中添加一个条件判断,当卡牌的血量超过预设值(如100)时,手动将血量归零。这种方法可以确保血量不会异常增长。

代码示例

if (bossLife > 100) {
GameObject.Find("lifeNumber").GetComponent
().text = "100";
}

效果

当血量超过预设值时,自动将血量重置为100,解决了异常问题。


问题二:实现循环出牌功能

问题描述

希望每15张为一组,卡牌能够循环出牌。现有卡牌集合中包含大量卡牌,需要实现每次抽取时自动选择未使用的卡牌并进行洗牌。

问题分析

  • 需要记录已经使用过的卡牌。
  • 需要对已经使用过的卡牌进行洗牌。
  • 需要确保卡牌不会重复使用。
  • 解决思路

  • 在卡牌的初始化时,为每张卡牌添加一个标记,记录其是否被使用。
  • 每次抽取卡牌时,筛选出标记为已使用的卡牌。
  • 将这些卡牌收集到一个临时集合中。
  • 对临时集合进行洗牌。
  • 随机从洗好的卡牌中抽取一张进行展示。
  • 具体实现

    // 收集已使用卡牌
    List
    usedCards = new List
    ();
    foreach (Card card in CardDesktop.cardList) {
    if (card.isActive) {
    usedCards.Add(card);
    }
    }
    // 洗牌
    List
    shuffledCards = new List
    ();
    int count = usedCards.Count;
    int remaining = count;
    while (shuffledCards.Count < remaining) {
    int index = Random.Range(0, remaining - 1);
    Card card = usedCards[index];
    if (!shuffledCards.Contains(card)) {
    shuffledCards.Add(card);
    usedCards.Remove(card);
    }
    }
    // 从洗好的卡牌中随机抽取
    List
    newDrawPiles = shuffledCards;
    // 例如,确定抽取数量(如2张或3张)
    if (newDrawPiles.Count < 2) {
    for (int i = 1; i <= newDrawPiles.Count; i++) {
    Card card = newDrawPiles[i - 1];
    // 实例化卡牌并进行显示
    GameObject go = Instantiate(Resources.Load("Card/Card" + GetCardId(card)), transform.position, transform.rotation);
    // 设置卡牌属性
    go.transform.GetChild(0).GetComponent
    ().text = card.CardType; go.transform.GetChild(3).GetComponent
    ().text = card.CardName; // 等等 yield return new WaitForSeconds(0.3f); ButtonToNextRound.isNextRound = false; // 更新卡牌状态 int index = CardDesktop.cardList.FindIndex(c => c.Id == card.Id); CardDesktop.cardList[index].isActive = false; } }

    效果

    实现了卡牌的循环使用,每15张为一组,卡牌不会重复使用,玩家每次抽取都会获得新的卡牌。


    总结

    通过上述优化,解决了血量异常和卡牌循环使用的问题。对于萌新开发者而言,理解卡牌逻辑并实现循环功能是一个有趣且有挑战的任务。希望以上方法能为您的开发提供帮助!


    接下来的任务

  • 实现2号、3号卡片的特殊功能。
  • 添加战斗结束的判定和界面。
  • 统一战斗界面到所有需要的事件中。
  • 添加除战斗界面外的其他事件界面。
  • 上一篇:unity3d-学习笔记17-卡牌游戏制作(实现“2”“3”号卡的功能)
    下一篇:unity3d-学习笔记15-卡牌游戏制作(部分功能的优化)

    发表评论

    最新留言

    很好
    [***.229.124.182]2025年04月29日 16时37分51秒