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

最终效果

在这里插入图片描述

系列导航

文章目录

  • 最终效果
  • 系列导航
  • 前言
  • 僵尸
    • 配置僵尸动画
    • 移动
    • 断头
    • 攻击
    • 死亡
  • 源码
  • 完结

前言

本节主要实现配置僵尸动画,移动,断头,攻击,死亡功能。

僵尸

配置僵尸动画

普通动画
在这里插入图片描述
无头动画,新增覆盖图层
在这里插入图片描述
在这里插入图片描述

需要注意的是,僵尸死亡记得去掉过度自动的勾选,不然死亡动画会一直重复播放
在这里插入图片描述

移动

新增Zombie

public class Zombie : MonoBehaviour
{public Vector3 direction; //移动方向public float speed;//速度void Update(){transform.position += direction * speed * Time.deltaTime;}
}

效果
在这里插入图片描述

断头

新增断头动画,配置预制体
在这里插入图片描述
修改Zombie,比如我们希望僵尸50血开始断头

private Animator animator;
private Character character;
public GameObject lostHead;//断头预制体
private Transform head;//断头位置
private bool isLostHead;//是否已经断头private void Start()
{animator = GetComponent<Animator>();character = GetComponent<Character>();head = transform.Find("Head");currentSpeed = speed;
}void Update()
{//移动transform.position += direction * currentSpeed * Time.deltaTime;//断头if (character.currentHealth <= 50 && isLostHead == false){isLostHead = true;Instantiate(lostHead, head.position, Quaternion.identity);animator.SetBool("headless", true);}
}

配置
在这里插入图片描述

并在断头预制体新增脚本LostHead,一段时间后销毁

public class LostHead : MonoBehaviour
{public float existenceTime = 3f;//存在时间private void Start(){Destroy(gameObject, existenceTime);}
}

效果
在这里插入图片描述

攻击

修改Zombie

//进入触发器 
private void OnTriggerEnter2D(Collider2D other)
{if (!other.CompareTag("Plant")) return;animator.SetBool("attack", true);currentSpeed = 0;
}//离开触发器
private void OnTriggerExit2D(Collider2D other)
{if (!other.CompareTag("Plant")) return;animator.SetBool("attack", false);currentSpeed = speed;
}

记得修改僵尸刚体为永不休眠,不然可能
在这里插入图片描述

效果
在这里插入图片描述

死亡

植物和僵尸,甚至子弹其实都存在死亡,为了统一的进行管理,我们可以引用接口的定义

新增interface接口,定义OnDie死亡方法

public interface IInteractable
{// 死亡public void OnDie();
}

修改Character,调用对应接口的死亡方法

public void TakeDamage(Attack attacker)
{if (invulnerable) return;if (currentHealth - attacker.damage > 0)// 如果扣除伤害后生命值大于0{currentHealth -= attacker.damage;// 扣除伤害值StartCoroutine(InvulnerableTimer()); // 启动无敌状态计时器}else{currentHealth = 0;GetComponent<IInteractable>().OnDie();}}

修改Zombie,关联IInteractable接口,定义僵尸的死亡方法

public class Zombie : MonoBehaviour, IInteractable
{//。。。public void OnDie(){currentSpeed = 0;animator.SetBool("die", true);GetComponent<Collider2D>().enabled = false;Destroy(gameObject, 2f);}
}

同理,定义植物和子弹的死亡方法。记得同样关联IInteractable接口

public void OnDie()
{Destroy(gameObject);
}

僵尸死亡效果
在这里插入图片描述
植物死亡效果
在这里插入图片描述

源码

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

完结

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

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

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

在这里插入图片描述

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

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

相关文章

java实现环形链表带哨兵

双向环形链表带哨兵&#xff0c;这时哨兵既作为头&#xff0c;也作为尾。 package com.tfq.arithmetic.linkedlist;import java.util.Iterator;/*** author: fqtang* date: 2024/05/22/8:40* description: 环形链表*/ public class DoublyLinkedListSentinel implements Iterab…

嵌入式学习——3——IO分类模型

1、阻塞IO和非阻塞IO 1.1 阻塞IO - 在阻塞IO模型中&#xff0c;当一个IO操作&#xff08;如读取或写入&#xff09;开始时&#xff0c;如果数据没有准备好&#xff0c;程序会被挂起&#xff08;即阻塞&#xff09;&#xff0c;直到数据准备好并且IO操作完成。 - 在数据准备阶段…

浏览器API与协议

现代浏览器是一个囊括了数百个组件的操作系统&#xff0c;包括进程管理、安全沙箱、分层的优化缓存、JavaScript虚拟机、图形渲染和GPU管道、存储系统、传感器、音频和视频&#xff0c;网络机制等等。 在浏览器上运行的应用的性能。&#xff0c;取决于多个组件&#xff1a;解析…

notepad++ 批量转所有文件编码格式为UTF-8

1、安装notepad及PythonScript_3.0.18.0插件 建议两者都保持默认路径安装x64版本&#xff1a; 阿里云盘分享https://www.alipan.com/s/xVUDpY8v5QL安装好后如下图&#xff1a; 2、new Script&#xff0c;新建脚本&#xff0c;文件名为ConvertEncoding 3、自动打开脚本&#xff…

YOLOV8 如何训练自己的数据

1、git code 项目 地址 2、数据标注&#xff1a;使用yolov8官方推荐的roboflow 地址 2.1 上传数据 2.2 标注 2.3 生成数据集 2.4 导出数据 3 训练 3.1 建.yaml 文件 建立.yaml 文件 3.2 修改.yaml文件里面的内容 1.这是roboflow 网站下下来的数据&#xff0c;只需要把.…

MySQL中锁的几种类型

MySQL根据加锁的范围&#xff0c;可以分为全局锁、表级锁、行级锁三类。 2.5.1. 锁定读 2.5.1.1. 共享锁和独占锁 事务的 读-读 情况并不会引起什么问题&#xff0c;对于 写-写、读-写 或 写-读 这些情况可能会引起一些问题&#xff0c;需要使用MVCC或者加锁的方式来解决。在…

15:00面试,15:08就出来了,问的问题有点变态。。。

从小厂出来&#xff0c;没想到在另一家公司又寄了。 到这家公司开始上班&#xff0c;加班是每天必不可少的&#xff0c;看在钱给的比较多的份上&#xff0c;就不太计较了。没想到8月一纸通知&#xff0c;所有人不准加班&#xff0c;加班费不仅没有了&#xff0c;薪资还要降40%…

MySQL数据库下的Explain命令深度解析

Explain是一个非常有的命令&#xff0c;可以用来获取关于查询执行计划的信息&#xff0c;以及如何解释输出。Explain命令是查看查询优化器如何决定执行查询的主要方法。这个功能有一定的局限性&#xff0c;并不总是会说出真相&#xff0c;但是它的输出是可以获取的最好信息&…

Kubernetes集群上的Etcd备份和恢复

在本教程中&#xff0c;您将学习如何在Kubernetes集群上使用etcd快照进行etcd备份和恢复。 在Kubernetes架构中&#xff0c;etcd是集群的重要组成部分。所有集群对象及其状态都存储在etcd中。为了更好地理解Kubernetes&#xff0c;有几点关于etcd的信息是您需要了解的。 它是…

【探索数据结构】线性表之双链表

&#x1f389;&#x1f389;&#x1f389;欢迎莅临我的博客空间&#xff0c;我是池央&#xff0c;一个对C和数据结构怀有无限热忱的探索者。&#x1f64c; &#x1f338;&#x1f338;&#x1f338;这里是我分享C/C编程、数据结构应用的乐园✨ &#x1f388;&#x1f388;&…

【超全干货】一文讲清什么是全民分销?怎么做好全民分销?

一、什么是全民分销&#xff1f; 全民分销&#xff0c;作为新时代营销模式的代表之一&#xff0c;是基于互联网尤其是社交媒体平台兴起的一种分销策略。它打破了传统零售与电子商务的界限&#xff0c;允许任何个人&#xff0c;无论是否为专业销售人员&#xff0c;都能成为品牌…

【WEB前端2024】开源智体世界:乔布斯3D纪念馆-第27课-门的打开

【WEB前端2024】开源智体世界&#xff1a;乔布斯3D纪念馆-第27课-门的打开 使用dtns.network德塔世界&#xff08;开源的智体世界引擎&#xff09;&#xff0c;策划和设计《乔布斯超大型的开源3D纪念馆》的系列教程。dtns.network是一款主要由JavaScript编写的智体世界引擎&am…

FreeRTOS_互斥量_学习笔记

互斥量 数值只有0或1 谁获得互斥量&#xff0c;就必须由谁释放同一个互斥量。 但其实在freeRTOS中&#xff0c;任务A获取的互斥锁&#xff0c;任务B也能释放。因此谁上锁谁开锁只是约定&#xff0c;在程序实现上不是强制的。 “可重入的函数"是指&#xff1a;多个任务同时…

Qt输入输出类使用总结

Qt输入输出类简介 QTextStream 类(文本流)和 QDataStream 类(数据流)Qt 输入输出的两个核心类,其作用分别如下: QTextStream 类:用于对数据进行文本格式的读/写操作,可在 QString、QIODevice或 QByteArray 上运行,比如把数据输出到 QString、QIODevice 或 QByteArray 对象…

Linux-文件或目录权限

在使用 ll 时&#xff0c;可以查看文件夹内容的详细信息&#xff0c;信息的第1位表示类型&#xff0c;具体信息如下&#xff1a; 类型说明-普通文件d文件夹b块设备文件c字符设备文件p管道文件s套接口文件 第2-10位表示权限&#xff0c; 举例&#xff1a;rwxr-xr-x 类型说明r…

业务架构核心要素之间的关系

背景 前面已经对业务架构的概念和发展简史有了初步的了解&#xff0c;现在主流的业务架构就是价值流能力&#xff0c;在这套架构体系中&#xff0c;有四个核心元素&#xff0c;分别是价值流、业务能力、信息、组织。 这四个核心元素&#xff0c;特别是对于价值流以及业务能力…

查看主机的php参数short_open_tag 是否为 on

我想要查看主机的php参数short_open_tag 是否为 on&#xff0c;由于我使用的是Hostease的Linux虚拟主机产品&#xff0c;在cPanel面板中并没有找到这个参数选项&#xff0c;因此无法查看。这边联系了Hostease技术支持了解&#xff0c;可以通过以下方式进行查看。 1.先登陆cPane…

Shell编程之条件判断语句

目录 一、条件判断 1、test命令 2、文件测试 3、整数值比较 4、字符串判断 5、逻辑测试 二、if语句 1、if单分支语句 2、双分支语句 3、多分之语句 4、case 分支语句 一、条件判断 Shell环境根据命令执行后的返回状态值&#xff08;echo $?&#xff09;来判断是否执行成…

鸿蒙HarmonyOS开发中的易混点归纳-持续补充中

相关文章目录 鸿蒙HarmonyOS开发术语全解&#xff1a;小白也能看懂&#xff01; 文章目录 相关文章目录前言一、build()函数和Builder装饰器&#xff1f;二、自定义组件和系统组件&#xff08;内置组件&#xff09;三、组件和页面四、自定义弹窗和其他弹窗总结 前言 一、build…

SpringBoot(五)之新增注解

SpringBoot&#xff08;五&#xff09;之新增注解 文章目录 SpringBoot&#xff08;五&#xff09;之新增注解核心注解EnableAutoConfiguration**SpringBootApplication** 条件注解Spring原生Conditional注解手写Conditional注解**ConditionalOnProperty****ConditionalOnMissi…