利用射线检测,检测两帧子弹位置连线是否碰撞敌人,并改变敌人状态。

控制敌人射出的子弹的类如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class SoliderAmmoController : MonoBehaviour
{public float velocity = 50f;public float dis;public Vector3 posRecord;public Ray ray;public RaycastHit hit;public int damage = 10;float flyTime = 0f;Vector3 gravity;// Start is called before the first frame updatevoid Start(){Destroy(gameObject, 2.5f);gravity = new Vector3(0f, 4.9f, 0f);}// Update is called once per framevoid Update(){ammoMovement();}void ammoMovement(){flyTime += Time.deltaTime;posRecord = transform.position;transform.position += (transform.forward * velocity * Time.deltaTime-0*gravity*flyTime*flyTime);dis = (posRecord - transform.position).magnitude;if (dis > 0){if (Physics.Raycast(posRecord, transform.forward, out hit,dis)){if (hit.transform.tag == "Player"){hit.transform.GetComponent<CarController>().currentHealth -= 10;hit.transform.GetComponent<AudioSource>().clip = hit.transform.GetComponent<CarController>().metalShooted;hit.transform.GetComponent<AudioSource>().Play();}Destroy(gameObject);}}}
}

代码说明:

首先要声明射线类Ray和射线击中返回信息类RaycastHit的实例

    public Ray ray;public RaycastHit hit;

之后调用射线检测的函数,其中Physics.Raycast的输入数据类型为Physics.Raycast(Vector3,Vector3,RaycastHit,float),第一个是发射点,第二个是射线方向,第三个是碰撞物信息,第四个是射线长度,输出为bool型。

下面是检查玩家子弹是否打中敌人的程序逻辑,分为打中身体和爆头两种情况。

            if (Physics.Raycast(posRecord, transform.forward, out hit, dis)){if (hit.transform.tag == "SoliderBody"){Transform solider = hit.transform.parent;solider.GetComponent<SoliderController>().currentBlood -= 10;solider.GetComponent<SoliderController>().nowState = 4;solider.GetComponent<Animator>().SetInteger("soliderState", 4);solider.GetComponent<Animator>().SetInteger("damageState", (int)Random.Range(1f, 3.99f));solider.GetComponent<SoliderController>().waitTime = 0.667f;solider.GetComponent<SoliderController>().nevrousTime = 10f;solider.GetComponent<AudioSource>().clip = solider.GetComponent<SoliderController>().bodyShooted;solider.GetComponent<AudioSource>().Play();}if (hit.transform.tag == "SoliderHead"){Transform solider = hit.transform.parent;solider.GetComponent<AudioSource>().clip = solider.GetComponent<SoliderController>().headShooted;solider.GetComponent<AudioSource>().Play();solider.GetComponent<SoliderController>().currentBlood -= 110;}Destroy(gameObject);}

unity射线检测高速飞行的子弹是否打到敌人相关推荐

  1. unity 射线检测 碰撞点不准确的原因分析

    unity 射线检测 碰撞点不准确的原因分析 射线检测的时候,出现了碰撞的那个点位置总是上下不准确,但屏幕中心位置不受影响,越远离中心,越偏移. 无论是用鼠标,还是ui上的坐标都不准确. 下面是代码 ...

  2. [Unity][射线检测]检测两个物体之间是否有其他物体阻挡

    1.用Physics.Raycast进行射线检测 物体必须有Collider碰撞组件. //定义一条射线,起点为GO1的物体坐标,终点为GO2的物体坐标 Ray ray = new Ray(GO1.t ...

  3. Unity射线检测的用法总结

    RayCast 射线检测 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人! (拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分享. ...

  4. 《Unity 射线检测》球形方向投射

    球形方向投射有两种. 1.Physics.SphereCast 粗略的返回碰撞信息以及碰撞到的第一个碰撞详细信息,如果不需要获得全部的碰撞信息的话,可以用这个. 2.Physics.SphereCas ...

  5. S电子产品和半导体的X射线检测

    电子产品和半导体的X射线检测 在X射线自动检测系统(AXI)中,速度.可靠性和高分辨率是关键.对于典型的高性能电子产品生产线来说,周期时间以秒为单位计算,这些生产线通常24小时全天候运转.因此,条件稳 ...

  6. 11.Unity2D 横版 简单AI 之背后受击转身+寻路跟随敌人+模块化+射线检测

    总目录https://blog.csdn.net/qq_54263076/category_11900070.html?spm=1001.2014.3001.5482 1.敌人背后受击转身+背部攻击伤 ...

  7. Unity 解决子弹穿模问题,2D射线检测

    子弹射速过快导致的穿模问题(2D) public void BulletMovement()     {         //记录位置         posRecord = transform.po ...

  8. Unity 射线与碰撞范围检测【踩坑记录】

    射线检测 射线检测在2D和3D的区别比较大 一定要加上对应的Collider组件 对应的函数只检测对应的Collider,Physics.Raycast是不会检测到Collider 2D的(这个让我有 ...

  9. Unity中的射线检测

    using System.Collections; using System.Collections.Generic; using UnityEngine;public class Lesson23 ...

最新文章

  1. react-router中的exact和strict
  2. NLog自定义Layout Renderer
  3. Nginx 配置 SSL 及 HTTPS 协议通信过程
  4. MySQL生产常用SQL语句汇总
  5. 这次看到源码了,华为开源了方舟编译器
  6. php html5 api,HTML5 File API解读
  7. 路由器的四根指针怎么放?
  8. 201709-1-打酱油
  9. 40行代码的人脸识别实践
  10. ASP读取文件 ASP写入/保存文件
  11. 一阶系统开环传递函数表达式_自动控制总结:第二章、控制系统的数学模型
  12. Python使用opencv识别简单图片中的主颜色
  13. 一文教会你使用R语言和基本统计分析
  14. 利用C语言写一个等额本息的还款计算器。
  15. 根据手势拿到superview
  16. 信息收集之基础端口扫描《诸神之眼——Nmap网络安全审计技术揭秘》总结一
  17. MySQL中幻读现象
  18. Java 第十一届 蓝桥杯 省模拟赛 小明植树(DFS)
  19. 如何理解反射信号淹没在上升沿中
  20. 网页设计作业`京东网站设计——仿2016版京东首页(1页) HTML+CSS+JavaScript 大学生网页作品 电商网页设计作业模板 学生网页制作源代码下载

热门文章

  1. 【C语言】探究整型数据在内存中的存储
  2. ubuntu源换成清华源_Ubuntu替换国内源(清华源)
  3. 大饼震荡不变,新平台搭建?
  4. [解锁越狱]诺基亚 Lumia 710 800 最详细的解锁越狱教程
  5. VC++解决Windows快捷方式图标不刷新问题(附源码)
  6. Android列表ListView控件的使用
  7. 顺时针(逆时针)填充矩阵
  8. httpf发送 json_Java用HttpClient4发送http/https协议get/post请求,发送map,json,xml,txt数据...
  9. 【算法千题案例】每日一练LeetCode打卡——110.种花问题
  10. kubernetes存储:local,openEBS,rook ceph