Unity实战案例全解析:PVZ 植物卡片状态分析

news2024/9/29 3:33:58

Siki学院2023的PVZ免费了,学一下也坏 

卡片状态

卡片可以有三种状态:

1.阳光足够,(且cd好了可以种植)

2.阳光不够,(cd?好了:没好 (三目运算符))

3.开始转cd,(被种下)

状态切换是单向循环的,只有a到b,没有a到c所以不会互相干扰,所以上面括号内的内容可以不用考虑 

转换状态触发条件

因为教程中使用的是枚举配合Switch切换状态

public class ControlState : MonoBehaviour
{
   public enum Card_State
        { 
        //准备就绪
        E_Ready,
        //Cd
        E_Cd,
        //cd结束等待阳光
        E_WaitingSun
    }
    //三种状态的对象
    public GameObject Light;
    public GameObject WaitSun;
    public Image LayerMask;
    Card_State state;

    //计时器变量
    public float ReadNeedTime = 2;
    public float CdTime = 0;

    //需要阳光数
    public int needSunPoint = 50;

    private void Awake() {
        //初始状态表现一下Cd冷却
         state = Card_State.E_Cd;
    }
    private void Update() {
        switch (state) {

            case Card_State.E_Ready:
                ReadyUpdate();
                break;
            case Card_State.E_Cd:
                CDUpdate();
                break;
            case Card_State.E_WaitingSun:
                WaitingSunUpdate();
                break;
            default:
                throw new System.NotImplementedException("未正确返回枚举类型");
        }
    }

    /// <summary>
    /// 阳光不够就切换回等待状态
    /// </summary>
    public void ReadyUpdate()
        {
        if (needSunPoint > SunManger.Instance.SunPoint) {
            Translate2WaitSun();
        }
    }
    /// <summary>
    /// 转cd,如果cd转完了则转到等待阳光阶段
    /// </summary>
    public void CDUpdate()
        { 
      //计时器变0将图片设置为WaitingSun状态
        CdTime += Time.deltaTime;
        LayerMask.fillAmount = (ReadNeedTime - CdTime) / ReadNeedTime;

        if (CdTime>ReadNeedTime)
            {
            Translate2WaitSun();
        }
    }
    /// <summary>
    /// 阳光足够则转为准备好的阶段
    /// </summary>
    public void WaitingSunUpdate() {
        if (needSunPoint <= SunManger.Instance.SunPoint)
            {
            Translate2Ready();
        }
    }

让我想想,从难度低到难度高,还有几种方式可以切换状态

1.if else 我以切换条件定义一堆变量可以实现条件切换

2.事件,写了这么多函数是否可以用Unity.Event的配合UGUI来切换呢?有待考究

胡说但是说不定可行:3.状态机  4.行为树

转换状态中要处理的逻辑

    /// <summary>
    /// 转换方法:2WaitSun
    /// </summary>
    public void Translate2WaitSun()
        {
        state = Card_State.E_WaitingSun;
        LayerMask.gameObject.SetActive(false);
        Light.SetActive(false);
        WaitSun.SetActive(true);
        //重置计时器
        CdTime = 0;
    }
    /// <summary>
    /// 转换方法:2Ready
    /// </summary>
    public void Translate2Ready()
        {
        
        state = Card_State.E_Ready;
        LayerMask.gameObject.SetActive(false);
        Light.SetActive(true);
        WaitSun.SetActive(false);
    }

    /// <summary>
    /// 转换方法:2Cd
    /// </summary>
    public void Translate2Cd() {

        state = Card_State.E_Cd;
        LayerMask.gameObject.SetActive(true);
        Light.SetActive(false);
        WaitSun.SetActive(true);
    }
    /// <summary>
    /// Ready下被点击将会进入cd
    /// </summary>
    public void OnClick()
        {
        //阳光检查
        if (needSunPoint > SunManger.Instance.SunPoint)
            return;
        //TODO:被种植

        //转入cd状态
        Translate2Cd();
    }
}

 

 

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

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

相关文章

Linux | 探索 Linux 信号机制:信号的产生和自定义捕捉

信号是 Linux 操作系统中非常重要的进程控制机制&#xff0c;用来异步通知进程发生某种事件。理解信号的产生、阻塞、递达、捕捉等概念&#xff0c;可以帮助开发者更好地编写健壮的应用程序&#xff0c;避免由于未处理的信号导致程序异常退出。本文将带你从基础概念开始&#x…

基于SpringBoot+Vue的牙科就诊管理系统(带1w+文档)

基于SpringBootVue的牙科就诊管理系统(带1w文档) 基于SpringBootVue的牙科就诊管理系统(带1w文档) 伴随着互联网发展&#xff0c;现今信息类型愈来愈多&#xff0c;信息量也非常大&#xff0c;那也是信息时代的缩影。近些年&#xff0c;电子元器件信息科学合理发展的趋势变的越…

【React】React18.2.0核心源码解读

前言 本文使用 React18.2.0 的源码&#xff0c;如果想回退到某一版本执行git checkout tags/v18.2.0即可。如果打开源码发现js文件报ts类型错误请看本人另一篇文章&#xff1a;VsCode查看React源码全是类型报错如何解决。 阅读源码的过程&#xff1a; 下载源码 观察 package…

C# System.BadImageFormatException问题及解决

C# System.BadImageFormatException问题 出现System.BadImageFormatException 异常有两种情况&#xff1a;程序目标平台不一致&引用dll文件的系统平台不一致。 异常参考 BadImageFormatException 程序目标平台不一致&#xff1a; 项目>属性>生成&#xff1a;x86 …

学LabVIEW编程,看编程书有些看不懂怎么办?

自学LabVIEW编程时&#xff0c;如果发现编程书籍内容难以理解&#xff0c;可以尝试以下几种方式来提高学习效果&#xff1a; 1. 从基础入手&#xff0c;逐步深入&#xff1a; LabVIEW是一种基于图形化编程的工具&#xff0c;不同于传统的编程语言&#xff0c;因此从基础概念开…

linux 操作系统下cupsenable命令介绍和使用案例

linux 操作系统下cupsenable命令介绍和使用案例 cupsenable 命令是 Linux 操作系统中用于启用 CUPS&#xff08;通用打印服务&#xff09;打印机的命令。它允许用户将指定的打印机重新启用&#xff0c;从而使其可以接受新的打印作业 cupsenable 命令概述 基本语法 bash cup…

LEAN 赋型唯一性(Unique Typing)之 n-provability 注解

《LEAN 赋型唯一性&#xff08;Unique Typing&#xff09;之 证明过程简介》 中&#xff0c;梳理了赋型唯一性&#xff08;Unique Typing&#xff09;牵涉的概念及相关推论与证明&#xff0c;此篇文章就先介绍 n-provability 的概念&#xff0c;记 ⊢ₙ 。其围绕的是赋型规则&a…

PHP创意无限一键生成小程序名片生成系统源码

创意无限&#xff0c;一键生成 —— 小程序名片生成系统&#xff0c;开启你的个性化商务新时代&#xff01; 一、告别千篇一律&#xff0c;拥抱个性化名片 你还在使用那些千篇一律的传统纸质名片吗&#xff1f;是时候做出改变了&#xff01;现在有了“创意无限一键生成小程序名…

Cisco Catalyst 9000 Series Switches, IOS XE Release 17.15.1 ED

Cisco Catalyst 9000 Series Switches, IOS XE Release 17.15.1 ED 思科 Catalyst 9000 交换产品系列 IOS XE 系统软件 请访问原文链接&#xff1a;https://sysin.org/blog/cisco-catalyst-9000/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&…

如何计算光伏在安装过程中的损耗程度?

光伏系统在实际安装和运营过程中&#xff0c;会受到多种因素的影响&#xff0c;导致电能损耗。这些损耗包括线缆损耗、逆变器效率、组件品质、灰尘积累、入射角损失等。 一、光伏系统损耗的分类 光伏系统的损耗大致可以分为以下几类&#xff1a; 1、线缆损耗&#xff1a;光伏…

响应式网站和自适应网站有什么区别?

响应式网站和自适应网站在技术基础、用户体验以及开发成本等方面存在显著差异。具体分析如下&#xff1a; 响应式网站和自适应网站有什么区别? 技术基础 响应式网站&#xff1a;通过CSS3的媒体查询&#xff08;Media Query&#xff09;来检测设备屏幕尺寸&#xff0c;并加载…

全网最适合入门的面向对象编程教程:49 Python函数方法与接口-函数与方法的区别和lamda匿名函数

合集 - Python面向对象编程(51) 1.可能是全网最适合入门的面向对象编程教程&#xff1a;Python实现-嵌入式爱好者必看&#xff01;06-232.全网最适合入门的面向对象编程教程&#xff1a;00 面向对象设计方法导论06-243.全网最适合入门的面向对象编程教程&#xff1a;01 面向对…

make 程序规定的 makefile 文件的书写语法(5)

&#xff08;40&#xff09;接着学习自动变量&#xff0c;就是 make 程序执行时&#xff0c;自动定义和产生的变量&#xff0c;来描述 makefile 文件&#xff0c;可以直接拿来用&#xff1a; 补充 D 与 F 的使用&#xff0c;前者只获得目录&#xff0c;后者只获得文件名&#x…

【C++算法】滑动窗口

长度最小的子数组 题目链接&#xff1a; 209. 长度最小的子数组 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/minimum-size-subarray-sum/description/ 算法原理 代码步骤&#xff1a; 设置left0&#xff0c;right0设置sum0&#xff0c;len0遍历l…

深度学习-13-小语言模型之SmolLM的使用

文章附录 1 SmolLM概述1.1 SmolLM简介1.2 下载模型2 运行2.1 在CPU/GPU/多 GPU上运行模型2.2 使用torch.bfloat162.3 通过位和字节的量化版本3 应用示例4 问题及解决4.1 attention_mask和pad_token_id报错4.2 max_new_tokens=205 参考附录1 SmolLM概述 1.1 SmolLM简介 SmolLM…

六西格玛咨询:石油机械制造企业的成本控制与优化专家

一、石油机械制造行业现状及主要困扰 随着全球能源需求的日益增长&#xff0c;石油开采和生产设备需求不断增加&#xff0c;石油机械制造行业在过去数十年里得到了迅猛发展。然而&#xff0c;石油机械制造作为一个高度复杂且技术密集的行业&#xff0c;也面临着多重挑战。首先…

路由策略原理与配置

&#x1f423;个人主页 可惜已不在 &#x1f424;这篇在这个专栏 华为_可惜已不在的博客-CSDN博客 &#x1f425;有用的话就留下一个三连吧&#x1f63c; 目录 一. 原理概述 二. 实验目的 实验内容 实验拓扑 实验配置 三. 实验结果 一. 原理概述 路由策略Route-P…

STM32中的计时与延时

前言 在裸机开发中,延时作为一种规定循环周期的方式经常被使用,其中尤以HAL库官方提供的HAL_Delay为甚。刚入门的小白可能会觉得既然有官方提供的延时函数,而且精度也还挺好,为什么不用呢?实际上HAL_Delay中有不少坑,而这些也只是HAL库中无数坑的其中一些。想从坑里跳出来…

刻意练习:舒尔特方格提升专注力

1.功能描述 刻意练习&#xff1a;舒尔特方格提升专注力 如果发现自己存在不够专注的问题&#xff0c;可以通过一个小游戏来提升自己专注力--舒尔特方格。 舒尔特方格的实施步骤如下&#xff1a; 一张纸上画出5X5的空方格。在方格中&#xff0c;没有任何规律的随机填写数字1…

[数据集][目标检测]葡萄成熟度检测数据集VOC+YOLO格式1123张3类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;1123 标注数量(xml文件个数)&#xff1a;1123 标注数量(txt文件个数)&#xff1a;1123 标注…