Unity实战案例全解析:PVZ 植物放置分析

前篇:Unity实战案例全解析:PVZ 植物卡片状态分析-CSDN博客 

植物应该如何从卡牌状态转为实物?

其实就只需要考虑两个步骤加一个后续处理:

1.点击卡牌后就实例化

需要一个植物状态枚举,因为卡牌分为拿在手上和种植下去两种状态

//植物状态枚举
enum PlantsState {Disable,Enable
}
public class Plants : MonoBehaviour {//拿到植物类型public PlantType plantType;PlantsState plantsState = PlantsState.Disable;private void Awake() {plantType = PlantType.Sun_Flower;Translate2Disable();}private void Update() {switch (plantsState) {case PlantsState.Disable:PlantDisableUpdate();break;case PlantsState.Enable:PlantEnableUpdate();break;default:break;}}protected virtual void PlantEnableUpdate() {}protected virtual void PlantDisableUpdate() {}public void Translate2Disable() {Debug.Log("关闭");plantsState = PlantsState.Disable;GetComponent<Animator>().enabled = false;}public void Translate2Enable() {Debug.Log("开启");plantsState = PlantsState.Enable;GetComponent<Animator>().enabled = true;}
}

同时可以创建一个放置管理器,创建一个List表存放植物

GetPlant是获取植物的类型

Addplant是为了获取并实例化该植物

FllowHand是为了将植物跟随鼠标,同时关闭植物的功能

OnClick里调用了Cell脚本的种植方法,将植物种下去

public class HandManger : MonoBehaviour
{private static HandManger instance;private HandManger() {instance = this;}public static HandManger Instance => instance;//植物预制体列表public List<Plants> plantsPrefabList;//当前鼠标内的植物private Plants currentPlant;private void Update() {FllowHand();}//添加植物方法,并且加入一个返回值用来判断当前手上是否有植物public bool AddPlant(PlantType plantType){ if(currentPlant != null) return false;//获取植物Plants plants =GetPlant(plantType);if (plants == null)  {Debug.Log("未得到对应类型的植物");  return false;}        //实例化对应植物currentPlant =GameObject.Instantiate(plants);return true;}//判断类型获取植物类型private Plants GetPlant(PlantType plantType){foreach (Plants item in plantsPrefabList) {if(item.plantType == plantType){ return item;}}return null;}//跟随鼠标private void FllowHand() {if(currentPlant ==null) return;//放在鼠标上的时候,不要有动画currentPlant.Translate2Disable();Vector3 handPos = Camera.main.ScreenToWorldPoint(Input.mousePosition);handPos.z= 0;   currentPlant.transform.position = handPos;}//种植到单元格内public void OnCellClick(Cell cells) {if (currentPlant == null)return ;bool isPlaned = cells.AddPlant(currentPlant);//种植成功if(isPlaned ==true)currentPlant = null;         }
}

2.放到草地上,同时开启其功能

草地的实现就是设置一个个碰撞器作为网格,考虑使用mesh组件,不然太多的碰撞器会消耗性能

Cell表示单元格,放到草地上就是将鼠标上的对象坐标转为单元格的坐标(因为单元格锚点默认在中心,可以在组件中调整) 

该脚本的AddPlant是种植方法,但是没有触发就只能算是预处理

public class Cell : MonoBehaviour
{//检查单元格内是否有植物public Plants CellCurrentPlant;//放置植物到单元格内private void OnMouseDown() {HandManger.Instance.OnCellClick(this);      }//为单元格添加植物public bool AddPlant(Plants plants){ if(CellCurrentPlant != null) {return false;}CellCurrentPlant = plants;CellCurrentPlant.transform.position = transform.position;plants.Translate2Enable();return true;}
}

3.处理阳光消耗

这个函数是写在卡牌切换的脚本之中的,needSunPoint是植物卡牌上的所需要阳光数,可以对不同卡牌进行不同设置,其实就是一个植物卡牌的模板,修改一下皮肤,修改一下数值就算是新的植物了

public void OnClick(){//阳光不够则什么也不发生if (needSunPoint > SunManger.Instance.SunPoint)return;//触发植物种植,如果植物被成功种下才触发减少阳光和进入cd状态bool isSuccessPlant = HandManger.Instance.AddPlant(plantType);if(isSuccessPlant == true){       //触发减少阳光SunManger.Instance.SubSun(needSunPoint);//转入cd状态Translate2Cd();}
}

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

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

相关文章

CS61C 2020计算机组成原理Lecture01-数字表示,溢出

1. 原码 原码就是符号化的数值&#xff0c;其编码规则简单直观&#xff1a;正数符号位用0表示&#xff0c;负数符号位用1表示&#xff0c;数值位保持不变。 x0.1101&#xff0c;则[x]原0.1101&#xff1b;x1101&#xff0c;则[x]原01101x -0.1111&#xff0c;则[x]原1.1111&…

Oracle从入门到放弃

Oracle从入门到放弃 左连接和右连接Where子查询单行子查询多行子查询 from子句的子查询select子句的子查询oracle分页序列序列的应用 索引PL/SQL变量声明与赋值select into 赋值变量属性类型 异常循环游标存储函数存储过程不带传出参数的存储过程带传出参数的存储过程 左连接和…

opencv之Canny边缘检测

文章目录 前言1.应用高斯滤波去除图像噪声2.计算梯度3.非极大值抑制4.应用双阈值确定边缘5.Canny函数及使用 前言 Canny边缘检测是一种流行的边缘检测算法&#xff0c;用于检测图像中的边缘。它通过一系列步骤将图像中的像素边缘突出显示出来&#xff0c;主要分为以下几个步骤…

PCL 点云随机渲染颜色

目录 一、概述 1.1原理 1.2实现步骤 1.3 应用场景 二、代码实现 2.1关键函数 2.2完整代码 三、实现效果 PCL点云算法汇总及实战案例汇总的目录地址链接&#xff1a; PCL点云算法与项目实战案例汇总&#xff08;长期更新&#xff09; 一、概述 本文将介绍如何使用PCL库…

uniapp升级Vue3:避坑指南与步骤详解

为什么要升级到 Vue3 Vue3 是 Vue.js 的最新版本&#xff0c;相比 Vue2&#xff0c;它带来了许多改进和新特性&#xff0c;比如更小的包体积、更好的性能、更强大的组合式 API 等。通过升级到 Vue3&#xff0c;我们可以享受到这些新特性带来的好处&#xff0c;提升项目的开发效…

模拟视频推到WVP推流列表

效果 1. wvp创建RTMP 2. 使用ffmpeg将本地的视频转为rtmp ffmpeg -re -i F:rtsp\123.mp4 -c copy -f flv rtmp://192.168.1.237:1935/cd/10001?sign=Z4Y3eYeSg

计算机网络408考研 2022

https://zhuanlan.zhihu.com/p/695446866 1 1 1SDN代表软件定义网络。它是一种网络架构&#xff0c;旨在通过将网络控制平面从数据转发平面分离出来&#xff0c;从而实现网络的灵活性和可编程性。在SDN中&#xff0c;网络管理员可以通过集中式控制器 来动态管理网络流量&…

Google高级应用

网站管理员中心 Google Search Console 谷歌高级搜索&#xff1a;https://www.google.com.hk/advanced_search?hlzh-CN&fg1 基础语法 AND/强迫包含NOT/-除去相关内容~搜索同义词*取代所有字符.取代一个字符" "双引号 强调OR/|或条件搜索()查询分组 高级语…

C#笔记10 Thread类怎么终止(Abort)和阻止(Join)线程

Thread类 C#笔记8 线程是什么&#xff1f;多线程怎么实现和操作&#xff1f;-CSDN博客 C#笔记9 对线程Thread的万字解读 小小多线程直接拿下&#xff01;-CSDN博客 上次说过怎么简单的使用多线程&#xff0c;怎么创建多线程&#xff0c;但是没有具体分析它的终止和释放。 线…

【乐吾乐大屏可视化组态编辑器】使用手册

1 总览 开始设计&#xff1a;大屏可视化设计器 - 乐吾乐Le5le 1.1 画布 画布即绘画区域&#xff0c;将图形拖拽到画布进行编辑&#xff0c;绘制大屏。 1.2 菜单栏 顶部菜单导航&#xff0c;一级菜单可设置Logo、公司名称、文件编辑、常用编辑、查看、帮助&#xff0c;设置大…

text2sql(NL2Sql)综述《The Dawn of Natural Language to SQL: Are We Fully Ready?》

《The Dawn of Natural Language to SQL: Are We Fully Ready?》(github)出自2024年6月的NL2SQL(Natural language to SQL )综述论文。这篇论文尝试回答如下三个问题&#xff1a; 问题1:NL2SQL的现状是什么&#xff1f;(Q1:Where Are we Now?) 论文图1总结了近20年NL2SQL方法…

Cyber Weekly #24

赛博新闻 1、OpenAI发布最强模型o1 本周四&#xff08;9月12日&#xff09;&#xff0c;OpenAI宣布推出OpenAIo1系列模型&#xff0c;标志着AI推理能力的新高度。o1系列包括性能强大的o1以及经济高效的o1-mini&#xff0c;适用于不同复杂度的推理任务。新模型在科学、编码、数…

比亚迪电动汽车的市场占比太惊人

比亚迪&#xff08;BYD&#xff09;在中国电动汽车市场的崛起无疑是近年来最显著的现象之一。凭借其强大的技术整合、丰富的产品线以及价格优势&#xff0c;比亚迪已经迅速成为中国乃至全球电动汽车领域的领导者。在2024年&#xff0c;比亚迪的市场份额在中国汽车市场达到了惊人…

SSHamble:一款针对SSH技术安全的研究与分析工具

关于SSHamble SSHamble是一款功能强大的SSH技术安全分析与研究工具&#xff0c;该工具基于Go语言开发&#xff0c;可以帮助广大研究人员更好地分析SSH相关的安全技术与缺陷问题。 功能介绍 SSHamble 是用于 SSH 实现的研究工具&#xff0c;其中包含下列功能&#xff1a; 1、针…

MySQL练手题--公司和部门平均工资比较(困难)

一、准备工作 Create table If Not Exists Salary (id int, employee_id int, amount int, pay_date date); Create table If Not Exists Employee (employee_id int, department_id int); Truncate table Salary; insert into Salary (id, employee_id, amount, pay_date) va…

危机中的机遇:客户服务在品牌危机管理中的角色与价值

在瞬息万变的商业环境中&#xff0c;品牌危机如同暗流涌动的漩涡&#xff0c;随时可能将企业卷入深渊。然而&#xff0c;正如古语所云&#xff1a;“祸兮福之所倚”&#xff0c;危机之中往往也蕴藏着转机与机遇。在这一过程中&#xff0c;客户服务作为企业与消费者之间的桥梁&a…

各类元器件调试记录-E+H

一、EH压力传感器 适用型号为&#xff1a; Cerabar S PMC71, PMP71/75 Deltabar S FMD76/77/78, PMD70/75 Deltapilot S FMB70 调试过程&#xff1a;(后续补上图片) 一、湿标(湿调) 1、前提条件&#xff1a;罐体可以灌满和实际水箱水位高度 2、调试步骤&#xff1a; A、调节语…

C++在Linux实现多线程和多进程的TCP服务器和客户端通信

多进程版本 服务器 #include <arpa/inet.h> #include <stdlib.h> #include <stdio.h> #include <string.h> #include <unistd.h> #include <sys/socket.h> #include <sys/wait.h> #include <signal.h> #include <string&…

uni-app和Node.js使用uni-push2.0实现通知栏消息推送功能

前言 uniapp 提供了 unipush 统一推送服务,但是每次要推送消息的时候都要登陆 Dcloud 开发者后台&#xff0c;有点不方便&#xff0c;运营需要在我们的后台系统就可以完成操作。 效果演示 消息下发流程 名词解释 名词解释通知消息指定通知标题和内容后&#xff0c;由个推 SD…

电脑上如何多开微信软件(多个微信同时使用)

想登录几个就下面这种文件里&#xff0c;复制几行即可&#xff1a; 创建的是以 .bat 文件结尾的txt文件&#xff08;先创建一个txt文本文档&#xff0c;等写好了命令保存后&#xff0c;再把文件的后缀名改为: .bat &#xff09;再保存即可。然后&#xff0c;右键以管理员运行&a…