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

news2025/2/23 5:26:05

最终效果

在这里插入图片描述

系列导航

文章目录

  • 最终效果
  • 系列导航
  • 前言
  • 绘制进度条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是生活!如果你遇到任何问题,也欢迎你评论私信找我, 虽然有些问题我也不一定会,但是我会查阅各方资料,争取给出最好的建议,希望可以帮助更多想学编程的人,共勉~

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

kettle学习(利用jsonPath定位,json文件转换)

kettle学习&#xff08;利用jsonPath定位&#xff0c;json文件转换&#xff09; 于数据处理的广袤天地间&#xff0c;我们时常需应对各类繁杂状况与各式格式。Kettle 作为极具威力的数据集成利器&#xff0c;赋予了我们诸多功能与无限可能此次博客里&#xff0c;我们将重点投向…

一站到底-Vue移动端从零到一构建高效应用

​&#x1f308;个人主页&#xff1a;前端青山 &#x1f525;系列专栏&#xff1a;vue篇 &#x1f516;人终将被年少不可得之物困其一生 依旧青山,本期给大家带来vue篇专栏内容:一文精通Vue移动端&#xff1a;从零到一构建高效应用 目录 1、项目创建 2、引入组件库 二、功能实…

上位机图像处理和嵌入式模块部署(f407 mcu内部flash编程)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 对于f407这样的mcu来说&#xff0c;有的时候我们需要对mcu内部的flash进行编程处理。有两种情况需要对flash进行编程&#xff0c;一种情况是可能一…

深度学习500问——Chapter10:迁移学习(2)

文章目录 11.2 迁移学习的基本思路有哪些 11.2.1 基于样本迁移 11.2.2 基于特征迁移 11.2.3 基于模型迁移 11.2.4 基于关系迁移 11.2 迁移学习的基本思路有哪些 迁移学习的基本方法可以分为四种。这四种基本方法分别是&#xff1a;基于样本的迁移&#xff0c;基于模型的迁移&a…

电子元器件批发的几种模式

电子元器件的批发模式多种多样&#xff0c;以下是几种常见的模式&#xff1a; 传统批发模式&#xff1a;传统的电子元器件批发模式是指厂商或代理商通过与制造商签订合同&#xff0c;大批量购买元器件&#xff0c;并将其以较低的价格批发给零售商或其他中小型企业。这种模式通常…

树-二叉树的最大路径和

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

【C#】pdf按页分割文件,以及分页合并,效果还不错,你值得拥有

欢迎来到《小5讲堂》 这是《C#》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解。 温馨提示&#xff1a;博主能力有限&#xff0c;理解水平有限&#xff0c;若有不对之处望指正&#xff01; 目录 背景效果单页分割文件合并多页分割插件说明相关文章 背景 最近遇到一…

STM32Cube系列教程11:STM32 AES加解密模块性能测试

文章目录 本次测试环境本次测试所使用的系统时钟为48MHz本次测试主要测试对大量数据进行加解密所需的时间&#xff0c;本次为不严谨测试&#xff0c;忽略了程序调用耗时&#xff0c;结果仅供参考。 AES算法与数据加解密加密与解密对称加解密AES算法AES-ECBAES-CBC 填充算法PKCS…

ITIL简介重要组成部分

ITIL简介&重要组成部分 ITIL&#xff08;Information Technology Infrastructure Library&#xff09;是一个IT服务管理的最佳实践框架&#xff0c;通过服务战略、服务设计、服务过渡、服务运营和持续服务改进五个核心模块&#xff0c;帮助组织优化IT服务流程&#xff0c;…

嘴尚绝卤味:健康美味,引领卤味新风尚

在快节奏的现代生活中&#xff0c;人们对于美食的追求从未停歇。卤味作为中国传统美食的代表之一&#xff0c;以其独特的口感和丰富的营养&#xff0c;深受广大消费者的喜爱。而在众多卤味品牌中&#xff0c;嘴尚绝卤味凭借其健康、美味的特色&#xff0c;成为了市场上的佼佼者…

Pytorch解决 多元回归 问题的算法

Pytorch解决 多元回归 问题的算法 回归是一种基本的统计建模技术&#xff0c;用于建立因变量与一个或多个自变量之间的关系。 我们将使用 PyTorch&#xff08;一种流行的深度学习框架&#xff09;来开发和训练线性回归模型。 二元回归的简单示例 训练数据集&#xff08;可获取&…

分离式光电液位传感器有哪些特点?

分离式光电液位传感器是一种先进的液位检测技术&#xff0c;在科学技术的不断推进下得到了广泛应用。相比传统的液位传感器&#xff0c;分离式光电液位传感器具有许多独特的特点。 传感器采用了先进的光学技术&#xff0c;将传感器装在需要检测液位的位置&#xff0c;并采用了…

非GIS专业,真的不适合WebGIS开发吗?

到底是哪些人在新中地特训营学GIS开发&#xff1f; 很多同学对GIS开发的认知还停留在GIS专业的学生才能学GIS开发&#xff0c;然而&#xff0c;在新中地教育&#xff0c;非GIS专业的学生几乎占一半。 除了GIS专业&#xff0c;还有测绘、遥感等跟GIS差别不大的专业学生选择来学…

面试官:你讲下接口防重放如何处理?

前言 我们的API接口都是提供给第三方服务/客户端调用&#xff0c;所有请求地址以及请求参数都是暴露给用户的。 我们每次请求一个HTTP请求&#xff0c;用户都可以通过F12,或者抓包工具fd看到请求的URL链接&#xff0c;然后copy出来。这样是非常不安全的&#xff0c;有人可能会…

鸿蒙轻内核A核源码分析系列二 数据结构-位图操作

在进一步分析之前&#xff0c;本文我们先来熟悉下OpenHarmony鸿蒙轻内核提供的位操作模块&#xff0c;在互斥锁等模块对位操作有使用。位操作是指对二进制数的bit位进行操作。程序可以设置某一变量为状态字&#xff0c;状态字中的每一bit位&#xff08;标志位&#xff09;可以具…

Kubernetes——HPA自动伸缩机制

目录 前言 一、概念 1.定义 2.核心概念 3.工作原理 4.HPA的配置关键参数 5.关键组件 5.1HPA控制器&#xff08;HPA Controller&#xff09; 5.2Metrics Server 5.3自定义指标适配器&#xff08;Custom Metrics Adapter&#xff09; 5.4Deployment/ReplicaSet 5.5Po…

文件二维码能快速生成吗?多种类型文件生成二维码的方法

现在将文件做成二维码是一种很常用形式&#xff0c;通过二维码来存储多个文件&#xff0c;在手机上扫码查看内容&#xff0c;对于文件的安全性和用户体验都有很好的提升。用户无需下载文件&#xff0c;扫码就可以快速在线阅读或者下载文件内容&#xff0c;有利于文件的快速分享…

2024年智能制造行业CRM研究(附需求清单、市场格局、选型建议)

在国家大力鼓励智能制造行业与数字化转型这个大背景下&#xff0c;我们选择了2024年智能制造行业数字化的几个关键趋势做深入解读&#xff0c;并对智能制造行业核心的数字化系统CRM进行了全面评估与排名。本文不仅提供了详尽的需求清单&#xff0c;帮助企业明确自身对CRM系统的…

不定时更新 解决无法访问GitHub github.com 打不开 访问加速

1 修改hosts Windows 10为例,‪文件C:\Windows\System32\drivers\etc\hosts 管理员打开记事本来修改 文件-打开-“C:\Windows\System32\drivers\etc\hosts” 20.205.243.168 api.github.com 185.199.108.154 github.githubassets.com 185.199.108.133 raw.githubusercontent.…

1.ei论文会被scopus检索吗文被其检索吗?

ei论文会被scopus检索吗 scopus数据库能检索的专业范围是比较广泛的&#xff0c;涵盖了医学&#xff0c;地球环境科学&#xff0c;化学&#xff0c;数学&#xff0c;工程学&#xff0c;物理&#xff0c;生物科学等领域&#xff0c;也收录了很多会议论文&#xff0c;那么ei论文…