需求:1、炸弹经过一段时间,产生爆炸,并且对周围物体有一个爆炸力,推开其他物体

2、一个敌人会把炸弹吹灭,放置在其旁边的炸弹爆炸,会把已经吹灭的炸弹重新点燃

解决方法

1、“经过一段时间”:设置一个float StartTime 表示Boom开始时间,一个float WaitTime表示等待时间,游戏时间过了WaitTime,就会播放爆炸的动画。

2、“对周围物体有一个爆炸力,推开其他物体”:设置一个BoomForce表示爆炸的推力,在一个检测范围内如果有其他物体就把这个力施加给这个物体。

3、“会把已经吹灭的炸弹重新点燃”:检测范围如果检测到标签为“Boom”&&播放“Boom off”的吹灭动画,就把他的动画改为“Boom On”的点燃动画

​
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class Boom : MonoBehaviour
{//属性public float StartTime;   //Boom开始时间public float WaitTime;   //Boom等待时间public float BoomForce;[Header("check")]public float Raduis;   //检测的范围public LayerMask BoomMask;   //图层//引用private Animator Anim;private Collider2D Coll;private Rigidbody2D Rb;void Start(){Anim = GetComponent<Animator>();Coll = GetComponent<Collider2D>();Rb = GetComponent<Rigidbody2D>();StartTime = Time.time;   //令StartTime等于游戏开始时间}void Update(){Explotion();   //Explotion需要在Update里执行}public void OnDrawGizmos()   //显示检测范围,便于控制{Gizmos.DrawWireSphere(transform.position, Raduis);}//炸弹爆炸  时间经过等待时间就产生爆炸public void Explotion(){if (!Anim.GetCurrentAnimatorStateInfo(0).IsName("Boom off")){if (Time.time > StartTime + WaitTime){Anim.Play("Boom Explotion");}}}//炸弹周围物体的检测,在其范围内的都会被影响   爆炸开始时检测public void ExplotionCheck()   //animtion Event 放在动画帧中执行{Coll.enabled = false;Collider2D[] CollCheck = Physics2D.OverlapCircleAll(transform.position, Raduis, BoomMask);  //圆形检测范围Raduis为半径Rb.gravityScale = 0;    //取消重力,不然炸弹爆炸时会起飞foreach (var item in CollCheck)   //item表示CollCheck数组里的东西{Vector3 pos = transform.position - item.transform.position;item.GetComponent<Rigidbody2D>().AddForce((-pos + Vector3.up) * BoomForce, ForceMode2D.Impulse);//ForceMode2D.Impulse一个推力的感觉if (item.CompareTag("Boom") && item.GetComponent<Animator>().GetCurrentAnimatorStateInfo(0).IsName("Boom off")){item.GetComponent<Boom>().TurnOn();}}}//炸弹爆炸后销毁自己public void DestroyBoom(){Destroy(gameObject);}//吹灭炸弹动画public void TurnOff(){Anim.Play("Boom off");gameObject.layer = LayerMask.NameToLayer("NPC"); //使自身图层变为NPC}//其他炸弹爆炸,引起熄灭炸弹一起爆炸public void  TurnOn(){StartTime = Time.time;  //重置炸弹开始时间,不然炸弹一恢复就会爆炸Anim.Play("Boom On");gameObject.layer = LayerMask.NameToLayer("Boom"); //使自身图层变为Boom}}​

代码解释:(重点对一些我自己不是很懂的API解释,不对勿怪。。)
Explotion():if(!Anim.GetCurrentAnimatorStateInfo(0).IsName("Boom off")) 表示如果动画没有播放0图层(也就是Base Layer)中名字是Boom off的动画时,开始计时

ExplotionCheck(): Coll.enabled = false; 一开始取消自身碰撞器,不然利用数组检测碰撞器时,会把自身包进去。

  Collider2D[] CollCheck = Physics2D.OverlapCircleAll(transform.position, Raduis, BoomMask);  圆形物理检测(自身位置,检测半径,检测图层)

 foreach (var item in CollCheck)   //item表示CollCheck数组里的东西
        {
            Vector3 pos = transform.position - item.transform.position;
            item.GetComponent<Rigidbody2D>().AddForce((-pos + Vector3.up) * BoomForce, ForceMode2D.Impulse);//ForceMode2D.Impulse一个推力的感觉

       }  

利用foreach循环遍历数组,pos表示自身位置与物体位置 -pos表示一个反方向,Vector3.up表示还有一个爆炸后向上的力,乘以BoomForce爆炸力。

if (item.CompareTag("Boom") && item.GetComponent<Animator>().GetCurrentAnimatorStateInfo(0).IsName("Boom off"))
            {
                item.GetComponent<Boom>().TurnOn();
            }

比较标签“Boom”&&并且正在播放的是Base Layer的“Boom off”动画,就用TurnOn函数,重新点燃炸弹

In The End,都看到这了,点个赞呗

Unity案例学习中关于炸弹(Boom)爆炸的一些需求实现相关推荐

  1. unity 5.x从入门到精通_Unity学习中值得收藏的学习资料(书籍)与博客

    前言: 对于入门任何领域,收集相关比较优秀的学习资料,都是你不断提高自己的必备技能.而在信息爆炸的时代想要在繁杂的网络世界中找到好的学习资料,必然会耗费一定的时间和精力.为了给大家节省一点时间,在这里 ...

  2. 案例学习——Unity基于体绘制的大气散射shader

    本案例学习资料来源 Volumetric Atmospheric Scattering 案例学习--Unity基于体绘制的大气散射shader 0 效果展示 1 引入 1.0 介绍 1.1 单次散射( ...

  3. Unity 2D案例学习——制作Roguelike随机地下城

    01简介 该学习案例来自b站up主M_Studio的系列视频制作Roguelike随机地下城,此篇博客为案例学习笔记 Notice 1.该项目不包含包括敌人在内的一些游戏元素,仅为具有基础功能的dem ...

  4. [Unity] 战斗系统学习 4:FlowCanvas 中的 LatentActionNode

    [Unity] 战斗系统学习 2:FlowCanvas 中的 SubGraph 1. 并行执行 FlowScript 可能的魔改方向 其实我原本是想魔改 FlowCanvas 使其支持并行 FlowS ...

  5. 深度学习中梯度消失和梯度爆炸的根本原因及其缓解方法

    深度学习中梯度消失和梯度爆炸的根本原因及其缓解方法 一.梯度消失和爆炸的根本原因 1. 深层网络角度 2. 激活函数角度 二.梯度消失.爆炸的解决方案 1. 梯度剪切.正则 2. 采用其他的激活函数 ...

  6. 深度学习中的梯度消失、梯度爆炸问题

    写在前面: 有些博主对这个问题的解释很好,这里参考了: 详解机器学习中的梯度消失.爆炸原因及其解决方法 我在这方面的工作经验和知识面还不够,还需要积累后再做出更为专业的解答. 参考我之前转发过的一篇文 ...

  7. Unity MVC 案例学习笔记《二》

    MVC 案例学习笔记 注册事件,就是把事件加入到事件字典 发送事件,并携带参数,就是在事件字典中遍历找到具体的 controller 进行处理 using System.Collections; us ...

  8. 【翻译】为深度学习购买哪种GPU: 我在深度学习中使用GPU的经验和建议

    文章目录 概述 GPU是如何工作的? 对深度学习处理速度最重要的GPU规格 张量核心 没有张量核心的矩阵乘法 使用张量核心的矩阵乘法 带有张量核心和异步拷贝的矩阵乘法(RTX 30/RTX 40)和T ...

  9. Unity 3D学习(三) - 网络通信

    目前没有找到合适的教程, 暂以此为学习大纲: Unity3D网络通信_图文_百度文库 第一章 网络游戏与单机游戏的区别 内容: 网络和单机游戏对比. 网络游戏的特点. 介绍网络的几种实现方式. 介绍本 ...

最新文章

  1. hdu1160FatMouse's Speed(DP)
  2. Cacti Nagios Squid三个工具的一些区别
  3. ar 微信小程序_微信AR玩法支持实现后,微信小程序会有想象空间吗?
  4. 酒店管理系统房态图的效果制作
  5. c语言在程序中显示现在星期几,C语言程序设计: 输入年月日 然后输出是星期几...
  6. 统计0-n数字中出现k的次数
  7. 【高等数学】高等数学基础理论归纳
  8. 收藏 | 各种Optimizer梯度下降优化算法回顾和总结
  9. D3/Echarts/G2的对比分析
  10. 语音压缩编解码器:lyra
  11. 什么U盘启动盘制作工具是纯净版的,没有捆绑软件和广告的?
  12. PMP 考点 第十章 项目沟通管理
  13. Android模拟器群控,安卓模拟器多开哪个好 流畅不卡、省资源、群控刷机都有
  14. 任正非谈管理--读书笔记
  15. JS逆向解析案例-巨潮证券市场数据库(python)
  16. PHP用特殊符号分割小说内容和章节
  17. 使用Python+OpenCV+FaceNet 实现亚马逊门铃系统上的人脸识别
  18. 从服务业开始创业,该怎么起步?
  19. mysql 中间件 atlas_mysql中间件atlas配置使用
  20. Ubuntu中安装Python h5py

热门文章

  1. 乌合之众(大众心理研究)之二:群体的时代
  2. 【2012年中山纪念中学信息学竞赛初一选拔赛一】纪中作业(c)
  3. 抢食!传google将依托自有光纤推无线网络效劳
  4. java左手握右手_环保型燃料—丙烷(C3H8)曾用于北京奥运会“祥云”火炬燃料,下列有关烷烃的说法不正确的是()A.丙烷分子中三个...
  5. LaTeX输出实心圆点列表
  6. 校园宿舍网的搭建及简单原理分析
  7. FEM计算2D瞬态热传导方程
  8. 网易闪电邮收信显示连接服务器,网易闪电邮IMAP协议同步网页邮箱收发邮件的使用技巧...
  9. C语言可以开发哪些项目?
  10. 命令行进入python之后, 如何退出来