unity射线检测高速飞行的子弹是否打到敌人
利用射线检测,检测两帧子弹位置连线是否碰撞敌人,并改变敌人状态。
控制敌人射出的子弹的类如下:
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射线检测高速飞行的子弹是否打到敌人相关推荐
- unity 射线检测 碰撞点不准确的原因分析
unity 射线检测 碰撞点不准确的原因分析 射线检测的时候,出现了碰撞的那个点位置总是上下不准确,但屏幕中心位置不受影响,越远离中心,越偏移. 无论是用鼠标,还是ui上的坐标都不准确. 下面是代码 ...
- [Unity][射线检测]检测两个物体之间是否有其他物体阻挡
1.用Physics.Raycast进行射线检测 物体必须有Collider碰撞组件. //定义一条射线,起点为GO1的物体坐标,终点为GO2的物体坐标 Ray ray = new Ray(GO1.t ...
- Unity射线检测的用法总结
RayCast 射线检测 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人! (拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分享. ...
- 《Unity 射线检测》球形方向投射
球形方向投射有两种. 1.Physics.SphereCast 粗略的返回碰撞信息以及碰撞到的第一个碰撞详细信息,如果不需要获得全部的碰撞信息的话,可以用这个. 2.Physics.SphereCas ...
- S电子产品和半导体的X射线检测
电子产品和半导体的X射线检测 在X射线自动检测系统(AXI)中,速度.可靠性和高分辨率是关键.对于典型的高性能电子产品生产线来说,周期时间以秒为单位计算,这些生产线通常24小时全天候运转.因此,条件稳 ...
- 11.Unity2D 横版 简单AI 之背后受击转身+寻路跟随敌人+模块化+射线检测
总目录https://blog.csdn.net/qq_54263076/category_11900070.html?spm=1001.2014.3001.5482 1.敌人背后受击转身+背部攻击伤 ...
- Unity 解决子弹穿模问题,2D射线检测
子弹射速过快导致的穿模问题(2D) public void BulletMovement() { //记录位置 posRecord = transform.po ...
- Unity 射线与碰撞范围检测【踩坑记录】
射线检测 射线检测在2D和3D的区别比较大 一定要加上对应的Collider组件 对应的函数只检测对应的Collider,Physics.Raycast是不会检测到Collider 2D的(这个让我有 ...
- Unity中的射线检测
using System.Collections; using System.Collections.Generic; using UnityEngine;public class Lesson23 ...
最新文章
- react-router中的exact和strict
- NLog自定义Layout Renderer
- Nginx 配置 SSL 及 HTTPS 协议通信过程
- MySQL生产常用SQL语句汇总
- 这次看到源码了,华为开源了方舟编译器
- php html5 api,HTML5 File API解读
- 路由器的四根指针怎么放?
- 201709-1-打酱油
- 40行代码的人脸识别实践
- ASP读取文件 ASP写入/保存文件
- 一阶系统开环传递函数表达式_自动控制总结:第二章、控制系统的数学模型
- Python使用opencv识别简单图片中的主颜色
- 一文教会你使用R语言和基本统计分析
- 利用C语言写一个等额本息的还款计算器。
- 根据手势拿到superview
- 信息收集之基础端口扫描《诸神之眼——Nmap网络安全审计技术揭秘》总结一
- MySQL中幻读现象
- Java 第十一届 蓝桥杯 省模拟赛 小明植树(DFS)
- 如何理解反射信号淹没在上升沿中
- 网页设计作业`京东网站设计——仿2016版京东首页(1页) HTML+CSS+JavaScript 大学生网页作品 电商网页设计作业模板 学生网页制作源代码下载
热门文章
- 【C语言】探究整型数据在内存中的存储
- ubuntu源换成清华源_Ubuntu替换国内源(清华源)
- 大饼震荡不变,新平台搭建?
- [解锁越狱]诺基亚 Lumia 710 800 最详细的解锁越狱教程
- VC++解决Windows快捷方式图标不刷新问题(附源码)
- Android列表ListView控件的使用
- 顺时针(逆时针)填充矩阵
- httpf发送 json_Java用HttpClient4发送http/https协议get/post请求,发送map,json,xml,txt数据...
- 【算法千题案例】每日一练LeetCode打卡——110.种花问题
- kubernetes存储:local,openEBS,rook ceph