和之前的普通攻击模式不同,普通攻击是利用射线与制定层物体进行碰撞,返回单点的碰撞信息。在进行射线穿透攻击时,首先要做好各个字段以及相关变量、方法的准备工作。

修改特殊攻击相关方法的重要核心是

specialAttackHitInfo = Physics.RaycastAll(testRay, 100, attactHitMask)

与该语句相关的参量定义如下

private RaycastHit[] specialAttackHitInfo;laser.gameObject.SetActive(true);laser.SetPosition(0, gunBarrelEnd.position);//枪口的粒子效果开始播放fireParticle.Play();//枪口灯光激活fireLight.enabled = true;//以枪口位置为起点,枪口正前方为方向,产生一条3D射线Ray testRay = new Ray(gunBarrelEnd.position, gunBarrelEnd.forward);//发射射线,记录碰撞信息和碰撞结果specialAttackHitInfo = Physics.RaycastAll(testRay, 100, attactHitMask);

以下是specialattack的方法

private void PlayerSpecialAttack(){//如果按下鼠标左键if (Input.GetAxis("Fire1") > 0){//激光线激活laser.gameObject.SetActive(true);//枪口的粒子效果开始播放fireParticle.Play();//枪口灯光激活fireLight.enabled = true;//设置线渲染器的起点和终点laser.SetPosition(0, gunBarrelEnd.position);laser.SetPosition(1, gunBarrelEnd.position + gunBarrelEnd.forward * 100);//以枪口位置为起点,枪口正前方为方向,产生一条3D射线Ray testRay = new Ray(gunBarrelEnd.position, gunBarrelEnd.forward);//发射射线,记录碰撞信息和碰撞结果specialAttackHitInfo = Physics.RaycastAll(testRay, 100, attactHitMask);//bool值,指示是否有敌人受到伤害bool specialDamageValidState = false;//遍历碰撞信息数组for(int i = 0; i < specialAttackHitInfo.Length; i++){//如果第i个物体时敌人if (specialAttackHitInfo[i].transform.gameObject.layer == LayerMask.NameToLayer("Enemy")){//特殊攻击处于未冷却状态if (specialAttackColdState == false){//第i个敌人受到伤害specialAttackHitInfo[i].transform.GetComponent<Enemy>().TakeDamage(specialAttackDamage);//有至少一个敌人受到伤害specialDamageValidState = true;}}}//如果只要有一个敌人受到伤害if (specialDamageValidState){//特殊攻击进入冷却specialAttackColdState = true;}}//否则else{StopSpecialAttack();}}

对比普通攻击normalattack方法

private void PlayerNormalAttack(){//如果按下鼠标左键if (Input.GetAxis("Fire1") > 0){//激光线激活laser.gameObject.SetActive(true);laser.SetPosition(0, gunBarrelEnd.position);//枪口的粒子效果开始播放fireParticle.Play();//枪口灯光激活fireLight.enabled = true;//以枪口位置为起点,枪口正前方为方向,产生一条3D射线Ray testRay = new Ray(gunBarrelEnd.position, gunBarrelEnd.forward);//发射射线,记录碰撞信息和碰撞结果bool hitResult = Physics.Raycast(testRay, out normalAttackHitInfo, 100, attactHitMask);//如果射线和制定层的物体发生碰撞if (hitResult){//设置激光渲染器的终点laser.SetPosition(1, normalAttackHitInfo.point);//在渲染器的终点处生成一个粒子效果if (hitParticle == null){              hitParticle = Instantiate(Resources.Load<GameObject>("Prefabs/BulletFatExplosionFire"), normalAttackHitInfo.point, Quaternion.identity) as GameObject;}else{//若之前已经生成射击点,则更新该粒子的位置hitParticle.transform.position = normalAttackHitInfo.point;}}//否则else{//设置激光渲染器的终点laser.SetPosition(1, gunBarrelEnd.position + 100 * gunBarrelEnd.forward);}//如果射线碰到的物体是敌人if (normalAttackHitInfo.transform.gameObject.layer == LayerMask.NameToLayer("Enemy")) {//如果普通攻未冷却if(normalAttackColdState == false){//敌人受到伤害normalAttackHitInfo.transform.GetComponent<Enemy>().TakeDamage(normalAttackDamage);normalAttackColdState = true;}}}//否则else{StopNormalAttack();}}

Unity3d射线穿透攻击相关推荐

  1. Unity之射线穿透

    小白欢迎评论,共同探讨,共同进步 一般的射线射中物体后就被阻挡了,假如碰到物体后,就会被拦截.如果我们想实现穿透某些物体,或者使射线不穿透UI的话.这时候就需要穿透的知识了. 下面写一个简单的射线. ...

  2. 基于FRP反向代理工具实现内网穿透攻击

    文章目录 前言 FRP反向代理 内网环境搭建 服务端的配置 客户端的配置 FRP内网穿透 FRP进阶使用 fscan内网神器 总结 前言 当我们拿下目标单位的一台外网服务器后,需要借助外网服务器作为跳 ...

  3. Unity3D 雷电激光攻击LineRender和光线投射

    最近在学习Unity3D游戏开发,练习制作飞机大战的2D游戏,但激光的效果不知道如何实现,经过网上查询和调试,做了一个激光的摸拟效果. 1.首先,组件准备,如图 Player: 飞机 fire: 子弹 ...

  4. Unity3d 射线检测

    射线碰撞单个物体: 方式1:从摄像机向世界发射一条射线,通常用于检测鼠标指针有没有选择物体 Ray ray = Camera.main.ScreenPointToRay(Input.mousePosi ...

  5. Unity3D射线检测墙面前停止移动

    功能: 计算角色/怪物走到目标,如果有墙就再墙前停止,防止一直怼墙走现象. 思路: 1. θ角 = 入射线(self - target) 与 法线(raycastHit.normal) 的夹角度(V3 ...

  6. unity3d点击屏幕判断是否击中场景中物体

    问题: 现在要做点击屏幕,然后判断是否击中了3d场景中的一个物体.(就像子弹发射出去,打击目标一样) 思路: 一开始我想的是,我点击屏幕,那么拥有点击处的坐标,然后从点击处创建一个gameobject ...

  7. 在python中如何判断数组中的数据为空值_缓存穿透问题,开发中真实解决方案

    前几天我们讲到了缓存的读写策略(缓存读写策略,我们开发人员都是这么用的)以及如何搭建高可用缓存系统(分布式缓存的高可用方案,我们都是这么做的),都是为了能在基础架构上让我们的缓存命中率能更高,防止大量 ...

  8. CT与DR双能X射线物质识别算法实现与应用(工业选煤、稀土分拣、毒爆检测、垃圾分类等)

    CT与DR双能X射线物质识别算法实现与应用(工业选煤.稀土分拣.毒爆检测.垃圾分类等)        算法涉及到的理论和模型,来自CNKI相关技术论文(不包括本人改进部分),如涉及版权问题,请联系本人 ...

  9. X射线、CT、MRI、PET总结

    X光片.CT.核磁共振在临床上是医学影像检查的几种常用的方法,成像原理各不相,有的以为越贵越好,要求做CT来替代普通X光片检查或者要求用磁共振代替CT检查,认为磁共振比CT清楚,CT比X光检清楚,这从 ...

最新文章

  1. 【NLP】听李宏毅点评GPT-3:来自猎人暗黑大陆的模型
  2. makefile 基本总结
  3. DijKstra算法普通+堆优化链式向前星
  4. 深入解读 MySQL 架构设计原理,剖析存储架构选型核心
  5. [leetcode]Longest Consecutive Sequence
  6. 该设备或资源(Web 代理)未设置为接受端口1080上的连接
  7. iOS常用第三方类库 Xcode插件
  8. java alert 乱码_在servlet中输出JS中文乱码,servlet中alert对话框出现中文乱码的解决方法...
  9. python中__future__包
  10. transformer学习之残差网络
  11. 2021,要这样学大数据开发
  12. 9年技术面试官讲解:计算机专业应届生怎样写简历
  13. Snmp拓扑结构php,基于SNMP的网络拓扑结构生成
  14. 确定不看看我的扫雷吗(C语言)
  15. 画象棋棋盘c语言程序设计,绘制中国象棋棋盘(c语言).docx
  16. 02. Compose 可组合组件之 属性 modifier
  17. 二十八条改善 ASP 性能和外观的技巧
  18. MapReduce中文版论文
  19. 安卓如何查找应用的安装包目录?
  20. IDEA如何修改背景图片

热门文章

  1. 4.有两个知阵a和b,均为2行3列。求两个矩阵之和。重载运算符“+”,使之能用于知阵相加。如:c=a+b。
  2. Flink WaterMark 详解
  3. 已知abc+cba=1333,其中a,b,c均为一位数,编程求出满足条件的a,b,c所有组合。
  4. 职场上个人的核心技术_如何打造个人职场核心竞争力
  5. OpenJudge NOI 1.9.14 铺地毯
  6. Creo(proe)快捷键设置
  7. 中国大学MOOC新媒体营销试题(含答案)
  8. 你不努力,有什么资格谈未来
  9. 基于以太坊区块链的物联网/IoT设备管理【论文及源码】
  10. 金额大写与阿拉伯数字转换