unity学习笔记----游戏练习07

一、僵尸攻击和植物的掉血和销毁

当僵尸接触到植物开始攻击时会持续削减植物的血量,当植物血量为零时就销毁当前植物。

在plantManager中,

为植物添加一个血量HP = 100,

public int HP = 100;

在写一个减少血量的方法,来减少血量。

    public void LostHP(int attack)
    {
        HP -= attack;
        if(HP<= 0)
        {
            Destroy(gameObject);
        }
    }

Zombie中需要用到攻击力,时间间隔,计时器

    //攻击力
    public int AttackNumber = 30;
    //时间间隔
    private float AktDuration ;
    //计时器
    public float AktTimer = 2;

TakeDamage方法需要在zombie脚本中调用,当僵尸开始攻击时,调用当前被攻击对象身上的TakeDamage方法。

  void EatUpdate()
    {
        AktTimer += Time.deltaTime;
        if (AktTimer > AktDuration&&CurrentEatPlant !=null)
        {
            CurrentEatPlant.LostHP(AttackNumber);
            AktTimer = 0;
        }
    }

因此需要保存当前的植物

private PlantManagr CurrentEatPlant;

在执行攻击动画时,保存当前的物体

CurrentEatPlant = collision.GetComponent<PlantManagr>();
为了防止攻击间隔出现问题,在每次切换到Eat状态时需要将计时器重置为0.

    public void TransitionEat()
    {
        zombieState = ZombieState.Eat;
        AktTimer = 0;
    }

演示效果如下:

6a70e004fd7141858996509cffb57793.gif

二、豌豆和僵尸的触发检测

1.僵尸的受伤处理

要为僵尸定义当前血量和最大血量,

    //血量
    public int HP = 100;
    public int currentHP;

在start中让其一开始时相等

currentHP = HP;

还需要一个减少血量的方法,在这个方法里面需要设置一个血量的百分比,是为了当血量低于一定值时,执行特定的动画。当血量小于零时调用dead方法,将僵尸的状态设置为Die

    public void TakeDamage(int damage)
    {
        if (currentHP <= 0) 
            return;
        this.currentHP -= damage;
        if (currentHP <= 0)
        {
            currentHP = -1;
            Died();
        }
        float HpPercent = currentHP * 1f / HP;
        animator.SetFloat("HPPercent", HpPercent);

    }

当僵尸死亡后将Collider2D禁用掉,避免再次发生碰撞检测,并且在两秒后销毁自身。

    private void Died()
    {
        zombieState = ZombieState.Die;
        GetComponent<Collider2D>().enabled = false;
        Destroy(gameObject, 2);
    }

为了方便后续的检测给僵尸添加一个 Zombie标签,

 

2.然后为豌豆添加一个圆形碰撞器组件 Circle Collider 2D ,在BulletControl中去做检测。

eafd393498c34631aec9f5e6259f3ed6.png

当其于僵尸发生碰撞要销毁自身,然后让僵尸血量减少。

为了方便子弹的攻击值能通过外界设置,还要为子弹添加一个设置攻击值的方法。

public void SetAKTnumber(int AKTnumber)
    {
        this.AKTnumber = AKTnumber;
    }

当子弹与敌人发生碰撞时,要得到敌人身上的脚本,调用这个脚本里面减少血量的方法,然后把伤害值传递过去。

 private void OnTriggerEnter2D(Collider2D collision)
    {
        if(collision.tag == "Zmobie")
        {
            Destroy(gameObject);
            collision.GetComponent<ZombieControl>().TakeDamage(AKTnumber);
        }
    }

为了避免子弹一值存在,当子弹没有碰撞到物体10s后销毁自身

   void Start()
    {
        Destroy(gameObject, 10);
    }

3.在豌豆射手攻击时去设置他的攻击值

go.SetAKTnumber(AKTvalue);

演示效果如下:僵尸会先失去头然后再死去最后消失。

6943b2c7fc924dae9255dd0301867510.gif

三、豌豆的爆裂效果

当豌豆接触到僵尸时对其添加一个爆炸的特效

e19a802317684a4db2630e927a2bb745.png

需要达到的效果是由下到大的方式播放,有因此为其添加一个动画,

打开动画编辑器后,点击录制,在不同的关键去修改豌豆的缩放,达到先变大后减小最后消失的效果

4ae9d1a53bf847e6946dadae0f671ae6.png

在代码中,当子弹接触到僵尸时就播放这个动画,因为这个动画是这个物体的默认动画,将其设置为预制体然后实例化出来就行了。

public GameObject PeaBulletHitPrefab;

GameObject go= GameObject.Instantiate(PeaBulletHitPrefab, transform.position, Quaternion.identity);
Destroy(go, 1);

效果如下:

7b4cb7a232934a718da32f122e2f5acf.gif

 

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

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

相关文章

NC65中间件能启动,前端客户端启动失败,加载异常,卡住(org.owasp.esapi)

控制台输出错误 ESAPI.properties could not be loaded by any means. Fail.SecurityConfiguration class(org.owasp.esapi.reference.DefaultSecurityConfiguration) CTOR threw exception.效果图&#xff1a; 解决方案 添加如下参数&#xff1a; -Dorg.owasp.esapi.resou…

cocos creator 碰撞系统

设置碰撞组件 3种组件类型&#xff0c;矩形碰撞&#xff0c;圆形碰撞&#xff0c; 多边形碰撞 开启碰撞检测 start() {//开启碰撞管理器let cm cc.director.getCollisionManager()cm.enabled true//绘制碰撞检测边界线。用于调试cm.enabledDebugDraw true//绘制精灵的边界c…

docker 修改默认存储位置

✨✨✨✨✨✨✨ &#x1f380;前言&#x1f381;查看前面docker储存位置&#x1f381;移动文件位置&#x1f381;修改配置文件docker.service&#x1f381;修改daemon.json&#x1f381;加载配置并重启 &#x1f380;前言 最近服务出现系统盘满了,发现其中docker存储占用很大一…

nginx使用stream模块代理端口

今天原本准备将本地金仓的54321端口进行代理的&#xff0c;但是发现代理后总是无法访问。后来突然发现之前使用nginx代理的是一个地址而不是端口。因此做以下笔记用来做记录。 一、stream安装与配置 假设nginx在usr/local/nginx中 1. 测试当前nginx是否有stream模块 ./usr/…

实用工具合集(持续更新...)

一、搜索引擎 1.1、小白盘 网站&#xff1a;https://www.xiaobaipan.com 度盘资源搜索的网站&#xff0c;能够搜索电影、电视剧、小说、音乐等资源&#xff08;注意&#xff1a;评论区很多小伙伴说小白盘有毒&#xff0c;我用谷歌浏览器搜索过几次并无大碍&#xff0c;请慎用…

wpf控件Expander集合下的像素滚动

项目场景&#xff1a;Expander集合滚动 如下图&#xff0c;有一个Expander集合&#xff0c;且设置 ScrollViewer.VerticalScrollBarVisibility "Auto" 每个Expaner下包含有若干元素&#xff0c;当打开Expader(即IsExpanded "true"&#xff09;时&#…

五分钟教会你如何制作宠物服务小程序

随着宠物市场的不断扩大和人们对宠物健康和幸福的关注度越来越高&#xff0c;宠物服务行业也迅速崛起。作为一名有志于创业的宠物爱好者&#xff0c;搭建一款宠物小程序是一个很好的切入点。本文将为大家介绍使用第三方制作平台乔拓云网搭建宠物小程序的全攻略。 第一步&#x…

1. MySQL 数据库

本章内容 关系型数据库基础 安装 MySQL 管理数据库和表 用户和权限管理 函数&#xff0c;存储过程&#xff0c;触发器和事件 MySQL 架构 存储引擎 服务器选项&#xff0c;系统和状态变量 优化查询和索引管理 锁和事务管理 日志管理 备份还原 MySQL 集群 压力测试…

23111 C++ day3

思维导图 设计一个Per类&#xff0c;类中包含私有成员:姓名、年龄、指针成员身高、体重&#xff0c;再设计一个Stu类&#xff0c;类中包含私有成员:成绩、Per类对象p1&#xff0c;设计这两个类的构造函数、析构函数和拷贝构造函数。 #include <iostream>using namespac…

自学java马上入职怕干不了活怎么办?

自学java马上入职怕干不了活怎么办&#xff1f; 在开始前我分享下我的经历&#xff0c;刚入行时遇到一个好公司和师父&#xff0c;给了我机会&#xff0c;两年时间从3k薪资涨到18k的&#xff0c; 我师父给了一些【java 】学习方法和资料&#xff0c;让我不断提升自己&#…

arcgis实现截图/截屏功能

arcgis实现截图/截屏功能 文章目录 arcgis实现截图/截屏功能前言效果展示相关代码 前言 本篇将使用arcgis实现截图/截屏功能&#xff0c;类似于qq截图 效果展示 相关代码 <!DOCTYPE html> <html> <head><meta charset"utf-8"><meta nam…

OpenCV图像的基本操作

图像的基本操作&#xff08;Python&#xff09; 素材图 P1&#xff1a;die.jpg P2&#xff1a;cool.jpg V&#xff1a;rabbit.mp4&#xff0c; 下载地址 读取展示-图像 import cv2img_1 cv2.imread(./die.jpg) # default cv2.IMREAD_COLOR print("die.jpg shape(imre…

【论文笔记】Learning Deconvolution Network for Semantic Segmentation

重要说明&#xff1a;严格来说&#xff0c;论文所指的反卷积并不是真正的 deconvolution network 。 关于 deconvolution network 的详细介绍&#xff0c;请参考另一篇博客&#xff1a;什么是Deconvolutional Network&#xff1f; 一、参考资料 Learning Deconvolution Netwo…

uniapp组件库Line 线条 的适用方法

目录 #平台差异说明 #基本使用 #线条类型 1.3.7 #兼容性 #API #Props 此组件一般用于显示一根线条&#xff0c;用于分隔内容块&#xff0c;有横向和竖向两种模式&#xff0c;且能设置0.5px线条&#xff0c;使用也很简单。 #平台差异说明 AppH5微信小程序支付宝小程序百…

算法:日志采集系统

一、算法描述 题目 日志采集是运维系统的的核心组件。日志是按行生成&#xff0c;每行记做一条&#xff0c;由采集系统分批上报。如果上报太频繁&#xff0c; 会对服务端造成压力&#xff1b;如果上报太晚&#xff0c;会降低用户的体验&#xff1b;如果一次上报的条数太多&…

Java和Redis实现一个简单的热搜功能

1. 前言 我们有一个简单的需求&#xff1a; 搜索栏展示当前登陆的个人用户的搜索历史记录&#xff0c;删除个人历史记录。用户在搜索栏输入某字符&#xff0c;则将该字符记录下来 以zset格式存储的redis中&#xff0c;记录该字符被搜索的个数以及当前的时间戳 &#xff08;用…

使用DBSyncer同步Oracle11g数据到Mysql5.7中_实现全量数据同步和增量数据实时同步_操作过程---数据同步之DBSyncer工作笔记007

之前都是用mysql和Postgresql之间进行同步的,已经实现了数据的实时同步,现在要实现Oracle数据库到Mysql数据库的全量,以及增量同步. 因为之前配置的不对,这里架构名写成了orcl,所以导致,虽然能连接上,但是,在进行数据同步的时候,看不到表,所以这里说一下如何进行连接 这里,首先…

代码随想录算法训练营第30天 | 回溯总结 + 3道Hard题目

今日任务 332.重新安排行程 51. N皇后 37. 解数独 总结 总结 回溯总结&#xff1a;代码随想录 回溯是递归的副产品&#xff0c;只要有递归就会有回溯&#xff0c;所以回溯法也经常和二叉树遍历&#xff0c;深度优先搜索混在一起&#xff0c;因为这两种方式都是用了递归。 …

Azure AI - 沉浸式阅读器,阅读障碍用户福音

目录 一、什么是沉浸式阅读器将内容划分开来提高可读性显示常用字词的图片突出显示语音的各个部分朗读内容实时翻译内容将单词拆分为音节 二、沉浸式阅读器如何工作&#xff1f;环境准备创建 Web 应用项目设置身份验证配置身份验证值安装标识客户端 NuGet 包更新控制器以获取令…

防火墙在企业园区出口安全方案中的应用(ENSP实现)

拓扑图 需求&#xff1a; 1、企业出口网关设备必须具备较高的可靠性&#xff0c;为了避免单点故障&#xff0c;要求两台设备形成双机热备状态。当一台设备发生故障时&#xff0c;另一台设备会接替其工作&#xff0c;不会影响业务正常运行。 2、企业从两个ISP租用了两条链路&…