当前位置: 首页 > news >正文

Unity实战案例全解析 :PVZ 植物脚本分析

         植物都继承了Pants脚本,但是我因为没注意听讲,把Pants也挂在植物上了,所以子类的PlantEnableUpdate和PlantDisableUpdate抢不过父类,无法正确触发动画,我还找不到哪里出了问题,所以就使用了携程加while强行触发了,但是经过对源码和工程的分析比对,我发现了问题所在,所以写都写了就这样吧,又不是不能跑,而且协程优化还好一些吗,气死我了呜呜,耽误了好几个小时,下次我一定好好听课呜呜呜

植物状态脚本 

using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using Unity.VisualScripting;
using UnityEngine;
using static ControlState;//植物状态枚举
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;}
}

向日葵脚本

using System.Collections;
using UnityEngine;
using System.Collections.Generic;
using Unity.VisualScripting;public class SunFlower : Plants {private Animator animator;public GameObject sunPrefab; // 阳光预制体public float minTime = 4f; // 最小生成时间public float maxTime = 10f;//最大生成时间public float offsetY = -0.5f;public float offsetX;private void Awake() {animator = this.GetComponent<Animator>();}private void Start() {StartCoroutine(GenerateSun());}protected override void PlantEnableUpdate() {//if (!isGeneratingSun) {//    isGeneratingSun = true;//}}private IEnumerator GenerateSun() {while (true) {// 随机等待时间float waitTime = Random.Range(minTime, maxTime);yield return new WaitForSeconds(waitTime);animator.SetTrigger("CreatSun");yield return new WaitForSeconds(1f);// 随机生成阳光位置offsetX = Random.Range(-0.5f, 0.5f);Vector3 sunPosition = new Vector3(transform.position.x + offsetX, transform.position.y + offsetY, transform.position.z);GameObject sunInstance = Instantiate(sunPrefab, transform.position, Quaternion.identity);// 获取 Sun 组件并调用 JumpTo 方法Sun sunComponent = sunInstance.GetComponent<Sun>();if (sunComponent != null) {sunComponent.JumpTo(sunPosition);}}}
}

豌豆射手脚本

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class PeashShooter : Plants
{//攻击间隔public float atkTime = 2;//攻击计时public float atkTimer=0;//豌豆预制体public GameObject peach;//豌豆实例化位置public Transform peashPos;void Start() {PlantEnableUpdate();StartCoroutine(GenerateSun());}private IEnumerator GenerateSun() {while (true) {atkTimer += Time.deltaTime;if (atkTimer > atkTime) {atkTimer = 0;Shoot();}yield return new WaitForSeconds(0);}
}public void Shoot() {GameObject.Instantiate(peach, peashPos.transform.position,Quaternion.identity);}
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 经典sql题(六)查找用户每月累积访问次数
  • 【Hot100】LeetCode—84. 柱状图中最大的矩形
  • Rust表达一下中秋祝福,群发问候!
  • 【优化器】Optimizer——深度学习中的优化器是什么作用呢?
  • claude,gpt,通义千问
  • 5. Python之数据类型
  • MATLAB窗口操作常用命令
  • 基于 Delphi 的家庭财务管理系统
  • Linux-mysql5.7-mysql8.0安装包下载及安装教程,二合一
  • 车型展示+接驳体验!苏州金龙海格客车闪耀汉诺威商用车展
  • Android 系统下:普通应用无缝安装,Launcher 应用安装遭遇罕见障碍解析
  • 使用 Java 初步搭建简单Spring 项目框架:
  • Docker和K8S
  • 车辆重识别(关于卷积神经网络一些资料)2024/9/11
  • 【454. 四数相加 II】
  • 《网管员必读——网络组建》(第2版)电子课件下载
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • CentOS 7 修改主机名
  • Centos6.8 使用rpm安装mysql5.7
  • extract-text-webpack-plugin用法
  • Git 使用集
  • HTTP--网络协议分层,http历史(二)
  • log4j2输出到kafka
  • node-sass 安装卡在 node scripts/install.js 解决办法
  • PHP的类修饰符与访问修饰符
  • select2 取值 遍历 设置默认值
  • Swift 中的尾递归和蹦床
  • 关于for循环的简单归纳
  • 基于web的全景—— Pannellum小试
  • 如何邀请好友注册您的网站(模拟百度网盘)
  • 试着探索高并发下的系统架构面貌
  • 为什么要用IPython/Jupyter?
  • 问题之ssh中Host key verification failed的解决
  • [地铁译]使用SSD缓存应用数据——Moneta项目: 低成本优化的下一代EVCache ...
  • 组复制官方翻译九、Group Replication Technical Details
  • ​2021半年盘点,不想你错过的重磅新书
  • ​你们这样子,耽误我的工作进度怎么办?
  • ​软考-高级-系统架构设计师教程(清华第2版)【第20章 系统架构设计师论文写作要点(P717~728)-思维导图】​
  • # 日期待t_最值得等的SUV奥迪Q9:空间比MPV还大,或搭4.0T,香
  • #HarmonyOS:基础语法
  • #QT(QCharts绘制曲线)
  • #传输# #传输数据判断#
  • (1)(1.19) TeraRanger One/EVO测距仪
  • (Bean工厂的后处理器入门)学习Spring的第七天
  • (C语言)共用体union的用法举例
  • (Pytorch框架)神经网络输出维度调试,做出我们自己的网络来!!(详细教程~)
  • (Windows环境)FFMPEG编译,包含编译x264以及x265
  • (二)Linux——Linux常用指令
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (附源码)计算机毕业设计ssm本地美食推荐平台
  • (力扣记录)235. 二叉搜索树的最近公共祖先
  • (六)DockerCompose安装与配置
  • (十一)JAVA springboot ssm b2b2c多用户商城系统源码:服务网关Zuul高级篇
  • (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境
  • (一)Dubbo快速入门、介绍、使用