【制作100个unity游戏之27】使用unity复刻经典游戏《植物大战僵尸》,制作属于自己的植物大战僵尸随机版和杂交版7(附带项目源码)

最终效果

在这里插入图片描述

系列导航

文章目录

  • 最终效果
  • 系列导航
  • 前言
  • 绘制进度条UI
  • 控制关卡进度测试
  • 按配置表使用关卡进度变化
  • 源码
  • 结束语

前言

本节主要实现关卡进度条的功能

绘制进度条UI

在这里插入图片描述

控制关卡进度测试

新增ProgressPanel代码,控制关卡进度

public class ProgressPanel : MonoBehaviour
{
    private GameObject progress;
    private GameObject head;
    private TextMeshProUGUI levelText;
    private GameObject flagPrefab;//旗帜预制体

    void Start()
    {
        progress = transform.Find("进度条").gameObject;
        head = transform.Find("僵尸头").gameObject;
        levelText = transform.Find("关卡文本").gameObject.GetComponent<TextMeshProUGUI>();
        flagPrefab = Resources.Load("Prefabs/UI/旗帜") as GameObject;

        //TODO:测试
        SetPercent(0.2f);
        SetFlagPercent(0.4f);
        SetFlagPercent(0.6f);
        SetFlagPercent(0.8f);
        SetLevelText(1);
    }

    //设置进度条和僵尸头位置
    public void SetPercent(float per)
    {
        // 图片进度条
        progress.GetComponent<Image>().fillAmount = per;
        // 进度条宽度
        float width = progress.GetComponent<RectTransform>().sizeDelta.x;
        float rightX = width / 2;
        // 设置头的x轴位置:最右边的位置 - 进度条宽度*进度值
        head.GetComponent<RectTransform>().localPosition = new Vector2(rightX - per * width, 0);
    }

    //设置旗帜位置
    public void SetFlagPercent(float per)
    {
        // 进度条宽度
        float width = progress.GetComponent<RectTransform>().sizeDelta.x;
        float rightX = width / 2;
        // 创建新的旗子
        GameObject newFlag = Instantiate(flagPrefab);
        //false:表示保持newFlag相对于世界坐标的位置、旋转和缩放不变,即不将newFlag的局部坐标和旋转值随着父级对象的变化而改变。
        newFlag.transform.SetParent(transform, false);
        // 设置位置
        newFlag.GetComponent<RectTransform>().localPosition = new Vector2(rightX - per * width, 7f);
        //把Head对象在其父级对象中的层级顺序置于最后,也就是显示在所有其他同级对象的最上方。
        head.transform.SetAsLastSibling();
    }

    //设置关卡文本
    public void SetLevelText(int per){
        levelText.text = "关卡 " + per;
    }
}

配置信息
在这里插入图片描述

在这里插入图片描述

测试运行效果,可以看到旗帜生成位置和进度条都正常
在这里插入图片描述

按配置表使用关卡进度变化

首先去除前面的测试代码,修改UIManager

public class UIManager : MonoBehaviour
{
    public static UIManager Instance { get; private set; }
    public TextMeshProUGUI sunSumText;
    public ProgressPanel progressPanel;
    int zombieDiedCount = 0;//死亡僵尸数量
    
    private void Awake()
    {
        Instance = this;
    }

    private void Start()
    {
        Init();
        zombieDiedCount = 0;
        InitProgressPanel();
    }

    public void Init()
    {
        sunSumText.text = GameManager.Instance.sunSum.ToString();
    }

    //初始化进度条
    public void InitProgressPanel()
    {
        // 初始化进度为0
        progressPanel.SetPercent(0);

        int count = GameManager.Instance.listData.Count;
        string progressId = GameManager.Instance.listData[0]["progressId"];
        // 遍历数据列表,设置旗帜的位置
        for (int i = 0; i < count; i++)
        {
            // 获取当前字典数据
            Dictionary<string, string> dic = GameManager.Instance.listData[i];
            if (progressId != dic["progressId"])
            {
                progressPanel.SetFlagPercent((float)i / count);
            }
            progressId = dic["progressId"];
        }
    }

    //更新进度
    public void UpdateProgressPanel()
    {
        zombieDiedCount++;
        progressPanel.SetPercent((float)zombieDiedCount / GameManager.Instance.listData.Count);
    }
}

修改GenerateZombies里的ZombieDied方法,每次僵尸死亡时调用UpdateProgressPanel方法,更新UI进度,当然你也可以在僵尸生成时调用,具体看你的需求

//更新进度UI
UIManager.Instance.UpdateProgressPanel();

效果
在这里插入图片描述

源码

源码不出意外的话我会放在最后一节

结束语

赠人玫瑰,手有余香!如果文章内容对你有所帮助,请不要吝啬你的点赞评论和关注,以便我第一时间收到反馈,你的每一次支持都是我不断创作的最大动力。当然如果你发现了文章中存在错误或者有更好的解决方法,也欢迎评论私信告诉我哦!

好了,我是向宇,https://xiangyu.blog.csdn.net

一位在小公司默默奋斗的开发者,出于兴趣爱好,最近开始自学unity,闲暇之余,边学习边记录分享,站在巨人的肩膀上,通过学习前辈们的经验总是会给我很多帮助和启发!php是工作,unity是生活!如果你遇到任何问题,也欢迎你评论私信找我, 虽然有些问题我也不一定会,但是我会查阅各方资料,争取给出最好的建议,希望可以帮助更多想学编程的人,共勉~

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/698788.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

(css)el-tabs滚动按钮浮动问题

(css)el-tabs滚动按钮浮动问题 修改前&#xff1a; 修改后&#xff1a; 思路&#xff1a;找到相应元素&#xff0c;降低层级 css写法&#xff1a; ::v-deep .el-tabs__nav {z-index: 1; }

【设计模式】行为型设计模式之 备忘录模式(快照模式)

介绍 备忘录应用场景明确并且有限&#xff0c;一般用来数据的防丢失、撤销和恢复。对大对象的备份和恢复&#xff0c;备忘录模式能有效的节省时间和空间开销。 定义 备忘录模式&#xff1a;也称为快照模式&#xff0c;在不违背封装原则的前提下&#xff0c;捕获一个对象的内…

你必须得认真体验下 TDengine Cloud 了!抢 600 元体验券

你真的了解 TDengine Cloud 吗&#xff1f; 在当今快速演变的数字经济时代&#xff0c;企业面临着前所未有的挑战和机遇。数据量的激增、计算需求的不断增长以及对业务敏捷性的迫切需求&#xff0c;促使企业寻求更加灵活、高效的技术解决方案。云服务由此应运而生&#xff0c;成…

文献解读-农业系列-第七期|《高粱驯化的基因组足迹和多种最终用途的育种选择》

关键词&#xff1a;高粱基因分析&#xff1b;基因组变异检测&#xff1b;全基因组重测序&#xff1b; 文献简介 标题&#xff08;英文&#xff09;&#xff1a;Genomic footprints of sorghum domestication and breeding selection for multiple end uses标题&#xff08;中文…

二叉树左右树交换

leetcode 226题 翻转二叉树 题目描述 给你一棵二叉树的根节点 root &#xff0c;翻转这棵二叉树&#xff0c;并返回其根节点。 示例 1&#xff1a; 输入&#xff1a;root [4,2,7,1,3,6,9] 输出&#xff1a;[4,7,2,9,6,3,1]示例 2&#xff1a; 输入&#xff1a;root [2,1,3]…

理解 Bearer Token:什么是它以及如何运作?

在当前数字化时代&#xff0c;网络安全尤为关键。随着技术快速进步&#xff0c;需求日益增长&#xff0c;保障应用程序中用户数据的安全成为开发者们的首要任务。其中&#xff0c;Bearer Token 作为一种高效的验证策略&#xff0c;在防止未授权访问中发挥着不可或缺的作用。 解…

算法005:有效三角形的个数

. - 力扣&#xff08;LeetCode&#xff09;. - 备战技术面试&#xff1f;力扣提供海量技术面试资源&#xff0c;帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/valid-triangle-number/ 要组成三角形的三条边&#xff0c;需要保证&am…

沂蒙精神宣讲员尹志林寻访“电台双杰”秦鸿钧贺伯珍烈士故居

临沂信息联播讯&#xff08;张春兄、冯爱云&#xff09; 近日&#xff0c;为了更好的弘扬沂蒙精神、讲好先烈事迹&#xff0c;沂蒙精神宣讲员、《百集学沂蒙党史颂沂蒙精神大讲堂》主讲人、中共临沂市兰山区委宣传部宣讲团成员尹志林一行&#xff0c;专程赶往沂南县辛集镇世和村…

wgcloud可以监测交换机的哪些数据

WGCLOUD可以监测交换机的cpu&#xff0c;内存&#xff0c;温度&#xff0c;电压&#xff0c;磁盘&#xff0c;流量传输速率等数据 WGCLOUD也是基于SNMP协议来监测交换机的

新能源汽车不安全?新能源汽车测试之方案篇——充电桩综合测试

背景 随着全球对气候变化和环境污染问题的日益加剧&#xff0c;新能源汽车作为一种环保、节能的交通工具备受关注。其发展背景主要源于对环境问题的关注以及对传统燃油汽车依赖的减少。新能源汽车的出现&#xff0c;带来了减少尾气排放、节能减排、保护环境等多方面的优点&…

梯度提升树GBDT系列算法

Boosting方法的基本元素与基本流程&#x1f4ab; 在Boosting集成算法当中&#xff0c;我们逐一建立多个弱评估器&#xff08;基本是决策树&#xff09;&#xff0c;并且下一个弱评估器的建立方式依赖于上一个弱评估器的评估结果&#xff0c;最终综合多个弱评估器的结果进行输出…

div拖拽改变宽高

目前是点击按照右下角边框拖拽改变大小 如果要点击按住内容拖拽也改变大小 则传入事件 $ event即可 startDrag(index,$event)和 drag(index,$event) 以下代码可直接使用 <template><div><div>目前是点击按照右下角边框拖拽改变大小 <br> 如果要点击按…

如何系统学习vue框架

前言 在软件开发的浩渺星海中&#xff0c;编程规范如同航海的罗盘&#xff0c;为我们指引方向&#xff0c;确保我们的代码之旅能够顺利、高效地到达目的地。无论是个人开发者还是大型团队&#xff0c;编程规范都是提升代码质量、保障项目成功不可或缺的一环。 因此&#xff0c…

MySQL表设计经验汇总篇

文章目录 1、命名规范2、选择合适的字段类型3、主键设计要合理4、选择合适的字段长度5、优先考虑逻辑删除&#xff0c;而不是物理删除6、每个表都需要添加通用字段7、一张表的字段不宜过多8、定义字段尽可能not null9、合理添加索引10、通过业务字段冗余来减少表关联11、避免使…

【漏洞复现】宏景eHR openFile.jsp 任意文件读取漏洞

0x01 产品简介 宏景eHR人力资源管理软件是一款人力资源管理与数字化应用相融合&#xff0c;满足动态化、协同化、流程化、战略化需求的软件。 0x02 漏洞概述 宏景eHR openFile.jsp 接口处存在任意文件读取漏洞&#xff0c;未经身份验证攻击者可通过该漏洞读取系统重要文件(如…

树-二叉树的最大路径和

一、问题描述 二、解题思路 因为各个节点的值可能为负数&#xff0c;初始化res(最大路径和)的值为最小整数&#xff1a;Integer.MIN_VALUE 我们这里使用深度遍历&#xff08;递归&#xff09;的方法&#xff0c;先看某一个子树的情况&#xff1a; 这里有一个技巧&#xff0c;…

纯音听力检测图有哪些形状?

纯音听力检测图有哪些形状&#xff1f; 当选择合适的放大装置时,听力图形状很重要。例如,听力图为下降型或高频陡降型的顾客可能受益于开放式验配,即可以泄漏低频声音,并对高频声音进行放大。 听力图形状分为以下几种&#xff1a; 下降型:低频听力较好,高频听力较差 上升型…

icloud 邮箱登入失败

APP NAME mail2HOSTING APP NAME cloudos2CLIENT TIME Tue Jun 11 2024 09:00:47 GMT0800 (中国标准时间) (1718067647802)USER AGENT Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36HOSTNAME www.icloud.…

20个国家科学数据中心(下)

15、国家海洋科学数据中心 平台网址&#xff1a;https://mds.nmdis.org.cn/ 简介&#xff1a;国家海洋科学数据中心由国家海洋信息中心牵头&#xff0c;采用“主中心分中心数据节点”模式&#xff0c;联合相关涉海单位、科研院所和高校等十余家单位共同建设。以“建立…

普通人想要自学ai,该如何入手,看完这篇你就懂了,零基础教程!

学会了AIGC之后&#xff0c;我只想说&#xff1a;无敌是多么寂寞&#xff1f; 之前我整理一篇会议记录起码要2小时。现在交给AI &#xff0c;5分钟搞定&#xff1b; 之前整理账目总是出错&#xff0c;现在利用AI财务整合器&#xff0c;轻松解决统计难题&#xff1b; 之前写个…