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

最终效果

在这里插入图片描述

系列导航

文章目录

  • 最终效果
  • 系列导航
  • 前言
  • 使用DoTween优化阳光生成和拾取效果
    • 拾取阳光优化
    • 生成阳光优化
  • 场景加载进度条
    • 新增加载场景Loading,绘制开始界面
    • 绘制菜单界面
    • 滑动滚轮一直滚动
  • 场景加载
  • 源码
  • 结束语

前言

本节主要实现使用DoTween优化阳光生成和拾取效果,场景切换加载进度条

使用DoTween优化阳光生成和拾取效果

拾取阳光优化

修改Sun

bool isMoving;

//当鼠标或手指经过物体时触发
public void OnMouseOver()
{
	if (isMoving) return;
    isMoving = true;
    transform.DOMove(Camera.main.ScreenToWorldPoint(UIManager.Instance.pickUpPos.position), 0.5f).OnComplete(
        () =>
        {
            GameManager.Instance.SetSunSum(sun);
            AudioManager.Instance.PlaySFX("拾取阳光");
            Destroy(gameObject);
        }
    );
}

效果
在这里插入图片描述

生成阳光优化

修改SunFlower

//产生阳光
public void ProduceSunshine()
{
    AudioManager.Instance.PlaySFX("生产阳光");
    // 在单位圆内生成随机点
    Vector2 randomPoint = Random.insideUnitCircle * produceDistance;
    // 将随机生成位置
    Vector3 spawnPosition = new Vector3(randomPoint.x, randomPoint.y, 0f) + transform.position;

    Transform tf = Instantiate(sunshine, spawnPosition, Quaternion.identity); // 生成阳光

    //慢慢变大动画效果
    tf.DOScale(Vector3.one, 0.5f).From(Vector3.zero);
}

效果
在这里插入图片描述

场景加载进度条

新增加载场景Loading,绘制开始界面

在这里插入图片描述
加载直接用一个滑动条,禁用背景图片,修改滑动条和滑动滚轮背景图片即可,记得禁用可拖动功能,并修改禁止透明和颜色
在这里插入图片描述
修改滑动条为已填充,水平模式
在这里插入图片描述
效果
在这里插入图片描述

绘制菜单界面

新增菜单场景Menu,简单绘制界面,先加一个背景图片即可
在这里插入图片描述

滑动滚轮一直滚动

新增Rotate ,这里使用了DOTween库来实现游戏对象的旋转动画,并且设置为循环播放。

public class Rotate : MonoBehaviour {
    private void Start() {
        transform.DORotate(new Vector3(0, 0, -360), 2f, RotateMode.FastBeyond360).SetEase(Ease.Linear).SetLoops(-1, LoopType.Restart);
    }
}

效果
在这里插入图片描述

场景加载

具体看这一篇文章就行了:【Unity实战】切换场景加载进度和如何在后台异步加载具有庞大世界的游戏场景,实现无缝衔接(附项目源码)

新增MainMenuManager,因为我们的场景比较小,时间加载会很快,所以这里加载进度直接用虚拟的就可以了

public class MainMenuManager : MonoBehaviour
{
    [SerializeField] private Slider _loadingBar;//加载进度条
    [SerializeField] private SceneField _levelScene;//加载场景
    [SerializeField] private GameObject btnStart;//开始游戏按钮
    [SerializeField] private float loadingTime = 2;//加载时间
    private float curProgress;

    private void Start()
    {
        AudioManager.Instance.PlayMusic("ThemeSong");
        _loadingBar.value = 0;
        btnStart.SetActive(false);
    }
    
    private void Update()
    {
        curProgress += Time.deltaTime / loadingTime;
        if (curProgress >= 1){
            curProgress = 1;
            btnStart.SetActive(true);
        }
        _loadingBar.value = curProgress;
    }

    //开始游戏
    public void StartGame()
    {
        AudioManager.Instance.PlayMusic("bgm2");
        //加载场景
        SceneManager.LoadScene(_levelScene);
        //清除 DOTween 库中当前正在进行的所有动画和补间
        DOTween.Clear();
    }
}

配置
在这里插入图片描述
效果
在这里插入图片描述

源码

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

结束语

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

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

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

在这里插入图片描述

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

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

相关文章

域策略笔记

域策略 导航 文章目录 域策略导航一、设置客户端壁纸二、重定向用户配置文件路径三、部署网络打印机四、部署共享文件夹为网络驱动器五、通过域策略推送软件安装六、通过域策略限制软件的使用通过路径进行限制通过进程限制 七、通过域策略将文件添加白名单八、通过域策略添加可…

Python机器学习决策树可视化工具库之pybaobabdt使用详解

概要 决策树是一种常用的机器学习算法,广泛应用于分类和回归任务。为了更好地理解和解释决策树模型的决策过程,pybaobabdt 库提供了一种可视化工具,帮助用户以图形化方式展示决策树的结构和决策路径。本文将详细介绍 pybaobabdt 库,包括其安装方法、主要特性、基本和高级功…

5位AI界“考生”参加高考作文写作,最高分竟然是...

随着一年一度高考的帷幕缓缓降下,如同往昔,各省高考作文命题迅速成为了社会各界热议的焦点。高考作文命题历来紧扣时代脉搏,而今年新课标I卷则直接聚焦于当前最为炙手可热的领域——“人工智能”。 阅读下面的材料,根据要求写作。…

python __init__.py 文件案例练习

通过一些案例练习来更好地理解 __init__.py 的用法。我们将创建一个简单的 Python 包,并在 __init__.py 中实现不同的功能。 案例一:基本包结构 创建包目录结构: mypackage/__init__.pymodule1.pymodule2.py实现 module1.py 和 module2.py: # mypackage/module1.py def fu…

vue-editor设置字体font-family

背景:Vue项目中需要用到富文本编辑器,所以选择了vue-editor这个富文本编辑器,发现字体font-family只有三种Sans Serif、Serif、MonoSpace可以选择,满足不了产品的需求,所以用想要定义成常用字体,主要是需要…

SwiftUI 利用 Swizz 黑魔法为系统创建的默认对象插入新协议方法(六)

功能需求 在 SwiftUI 的开发中,我们往往需要借助底层 UIKit 的“上帝之手”来进一步实现额外的定制功能。比如,在可拖放(Dragable)SwiftUI 的实现中,会缺失拖放取消的回调方法让我们这些秃头码农们“欲哭无泪” 如上图所示,我们在拖放取消时将界面中的一切改变都恢复如初…

【unity笔记】二、海洋系统Crest Ocean System基础

1. 创建海平面 首先确定项目中导入了HDRP插件。这里使用Crest Ocean System HDRP插件。 在场景下创建空对象,这里命名为Ocean。将 OceanRenderer 组件分配给Ocean。该组件将生成海洋几何图形并执行所有必需的初始化。其中Global Wind Speed 属性可以调节风浪大小。…

【新品上架】动捕级视觉定位精度!!首款搭载 VIOBOT 模块的无人机发布!

P450_Viobot无人机是P450系列科研无人机的最新产品,硬件上采用VIOBOT定位模块,室内定位精度极高,静态定位精度可达到与动捕定位相当的厘米级定位,飞行悬停定位误差在3.5cm内。也可室外GPS飞行(可选装RTK)&a…

latex导入图片报错

忘记导包了 \usepackage{graphicx}其中Photo是图片名字 \begin{figure}\centering\includegraphics[width0.5\linewidth]{Photo.png}\caption{Enter Caption}\label{fig:enter-label} \end{figure}

基于STM32移植U8g2图形库——OLED显示(HAL库)

文章目录 一、U8g2简介1、特点2、U8g2的使用步骤 二、I2C相关介绍1、I2C的基本原理2、I2C的时序协议 三、OLED屏的工作原理四、汉字点阵显示原理五、建立STM32CubeMX工程六、U8g2移植1、U8g2源码2、移植过程 七、代码编写1、参考博主实现的U82G的demo例程(1&#xf…

Matlab进阶绘图第59期—棒棒糖图

​棒棒糖图本质上是柱状图的一种变体。 棒棒糖图通过在每根柱子顶端添加圆点,以表示数据之间的相对位置。 此外,一般还会对每根棒棒糖按数值大小进行排序,从而更加方便阅读。 本文利用自制的Lollipop工具进行棒棒糖图的绘制,先…

python数据分析--- ch1-2 python初识入门

python数据分析--- ch1-2 python初识入门 1. 安装并启动jupyter2. 打印变量print()练一练 3. 变量与赋值 input()3.1 示例--饮料交换3.2 饮料交换完整code3.3 jupyter中写入code到py文件中3.4 在终端运行.py文件 : python 文件名3.5练一练1:简易版2&…

cdh zookeeper报错 Canary 测试建立与 ZooKeeper 服务的连接或者客户端会话失败。

我一直纳闷这个是什么问题,搜索了半天没有结果,因为别人没有遇到过。后面我重新搭建了另一套cdh,然后看了一下默认的配置,然后更新上去才发现的。 这里面的clientPortAddress不要手动设置端口号。 别勾选通信验证 不要开启TLS/SS…

嵌入式学习(二)——c51单片机(1)

使用keil软件 同时安装CH340驱动 将变成好的文件存成 .hex 交替闪烁代码 #include "reg51.h"void delay(unsigned int n) { while(n) { --n; } }int main(void) { while(1) { P20x00; delay(20000); P20xff; delay(20000); } return 0; } 让指定的灯亮 #includ…

在调用接口上map与forEach的区别

在场景:一个表格数据需要上传,每行表格需要上传图片->这就需要在提交时对数据也就是数组进行处理(先将每个元素图片上传拿到图片id 这种情况我刚开始就用的map处理,然后问题来了,提交的接口调用了,但是…

【Kadane】Leetcode 918. 环形子数组的最大和【中等】

环形子数组的最大和 给定一个长度为 n 的环形整数数组 nums ,返回 nums 的非空 子数组 的最大可能和 。 环形数组 意味着数组的末端将会与开头相连呈环状。形式上, nums[i] 的下一个元素是 nums[(i 1) % n] ,nums[i] 的前一个元素是 nums…

云效codeup

云效codeup 什么是云效codeup云效codeup操作代码库代码托管代码检测代码提交代码评审代码迁移 使用感受及建议 什么是云效codeup 云效代码管理(Codeup)是阿里云云效一站式 BizDevOps 平台提供的自研代码管理服务,为企业提供代码托管、代码评…

mysql:1205-Lock wait timeout exceeded;try restarting transaction

1.现象 2.分析 使用下面sql在自带数据库的information_schema中查询,注意观察那些长时间开启事务又没完成的进程,然后根据进程的db、操作人、主机、事务开启时间和状态,来排查是什么情况导致的事务未完成(代码异常、执行时间超时等等);我这里是异步作业事务执行时间过长导致的 …

夏日炎炎,护牙不闲——口腔问诊小程序开发助你笑口常开

近年来,“口呼吸”、“牙齿矫正”、“美牙贴片”等词越来越多的出现在大众的视野中,口腔健康成为了人们关注的新热点。但是市面上的口腔诊所数量众多又参差不齐,如何选择最合适的口腔诊所是人们面对的新问题。为了有效解决这一现状&#xff0…

【计算机毕业设计】259基于微信小程序的医院综合服务平台

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…