Unity——射线检测
1.new Raw(cube0.transform,Vector3.forward)
射线,第一个参数:射线的起始点;第二参数:射线的方向
myray = new Ray(this.gameObject.transform.position, Vector3.forward);
2.Physics.Raycast(myray)
物理射线检测,返回值是bool类型,根据返回值只能确定当前射线有没有碰撞到其他碰撞体
RaycastHit hitInfo
Physics.Raycast(myray,out hitInfo)
返回值只能返回是否碰撞到其他碰撞体;但是out出来一个hitInfo值是我们需要的射线碰撞到的信息
RaycastHit hit;if(Physics.Raycast(myray,out hit)){Debug.Log("transfirm:" + hit.transform + ",name:" + hit.transform.name + ",point:" + hit.point + ",nor:" + hit.normal);}
当我们的射线碰撞到一个游戏物体的碰撞体后,返回一个hit值这个对象包含的信息
collider:碰撞到的游戏物体的碰撞体
distance:碰撞体到射线起始点的距离
normal:碰撞点所在的平面的法向量
point:实际碰撞到的点的世界坐标位置
rigidbody:碰撞到的游戏物体的刚体
transform:碰撞到的游戏物体的Transform组件
Physics.Raycast(myray,out hit,100,
(1<<LayerMask.NameToLayer("UI"))+(1<<LayerMask.NameToLayer("cube")))
Int类型的参数是1左移对应层数所得来的,这样的操作可以一次检测到多个层的游戏物体
3.Camera.main.ScreenPointToRay(Input.mousePosition);
将鼠标触摸在屏幕上的点转换为射线
实现射击的效果
//定义一个射线Ray myray;//炮弹public GameObject bullet;//射线的返回值RaycastHit hitInfo;//弹痕public GameObject quade;void Update(){//运用这个api可以将输入的鼠标坐标转换为射线myray = Camera.main.ScreenPointToRay(Input.mousePosition);if (Input.GetMouseButtonDown(0)){if(Physics.Raycast(myray,out hitInfo, 1000)){//从摄像头到碰撞物体的距离Vector3 dir = hitInfo.point - transform.position;//生成子弹GameObject go =GameObject.Instantiate(bullet);//初始化子弹go.transform.position = transform.position;//给子弹初速度go.GetComponent<Rigidbody>().velocity = dir.normalized * 20;//生成弹痕GameObject shader = GameObject.Instantiate(quade);//弹痕生成的位置shader.transform.position = hitInfo.point + Vector3.forward;//弹痕的朝向shader.transform.rotation = Quaternion.LookRotation(-hitInfo.normal);}else{Vector3 v2 = Camera.main.ScreenToWorldPoint(Input.mousePosition+new Vector3(0,0,100));GameObject go = GameObject.Instantiate(bullet);go.transform.position = transform.position;go.GetComponent<Rigidbody>().velocity = v2.normalized * 20;}}}
4.RaycastAll
一条射线碰撞到多个碰撞体
private Ray myray;private RaycastHit[] rayInfo;// Update is called once per framevoid Update(){myray = new Ray(this.transform.position, -Vector3.left);Debug.DrawRay(this.transform.position, -Vector3.left,Color.red,10000);rayInfo = Physics.RaycastAll(myray, 100, (1 << LayerMask.NameToLayer("cube")));//这个RaycastHit[]能够接收所有碰撞到的物体信息,如果没有碰撞到返回的长度就是0for (int i = 0; i < rayInfo.Length; i++){Debug.Log(rayInfo[i].transform.name);}}
Unity——射线检测相关推荐
- unity 射线检测 碰撞点不准确的原因分析
unity 射线检测 碰撞点不准确的原因分析 射线检测的时候,出现了碰撞的那个点位置总是上下不准确,但屏幕中心位置不受影响,越远离中心,越偏移. 无论是用鼠标,还是ui上的坐标都不准确. 下面是代码 ...
- [Unity][射线检测]检测两个物体之间是否有其他物体阻挡
1.用Physics.Raycast进行射线检测 物体必须有Collider碰撞组件. //定义一条射线,起点为GO1的物体坐标,终点为GO2的物体坐标 Ray ray = new Ray(GO1.t ...
- Unity射线检测的用法总结
RayCast 射线检测 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人! (拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分享. ...
- unity射线检测高速飞行的子弹是否打到敌人
利用射线检测,检测两帧子弹位置连线是否碰撞敌人,并改变敌人状态. 控制敌人射出的子弹的类如下: using System.Collections; using System.Collections.G ...
- 《Unity 射线检测》球形方向投射
球形方向投射有两种. 1.Physics.SphereCast 粗略的返回碰撞信息以及碰撞到的第一个碰撞详细信息,如果不需要获得全部的碰撞信息的话,可以用这个. 2.Physics.SphereCas ...
- 直播笔记 | Unity中射线检测详解
本文首发于洪流学堂微信公众号. 洪流学堂,学Unity快人几步 你好,我是郑洪智,你的技术探路者. 这周三我们直播剖析了Unity中射线检测的功能,以下是直播内容精华部分笔记. 完整录播:https: ...
- Unity学习之Physic.Raycast(射线检测)个人理解分享
Physics.Raycast参数 public static bool Raycast(Vector3 origin, Vector3 direction, out RaycastHit hitIn ...
- Unity 射线与碰撞范围检测【踩坑记录】
射线检测 射线检测在2D和3D的区别比较大 一定要加上对应的Collider组件 对应的函数只检测对应的Collider,Physics.Raycast是不会检测到Collider 2D的(这个让我有 ...
- Unity中的射线检测
using System.Collections; using System.Collections.Generic; using UnityEngine;public class Lesson23 ...
- Unity 2019 射线检测失效
之前在做毕设的一个FPS游戏时,遇到了使用射线检测失效的情况,特此记录以下. 前因 在FPS游戏中,对于子弹的发射主要通过两种方式来实现. 一种可以通过实例化子弹的GameObject对其施加物理效果 ...
最新文章
- 批量残差网络-Aggregated Residual Transformations for Deep Neural Networks
- mongodb安装_MongoDB事实:商品硬件上每秒插入80000次以上
- node exprass安装运行实例
- vue 传递多行数据_vue 数据传递的方法
- 《少年先疯队》第九次团队作业:Beta冲刺与团队项目验收
- 数据结构——归并排序
- zynq7020安装linux图形界面,ZYNQ开发板的NFS文件系统安装 - ZYNQ7020学习
- ubuntu 16.04 重装失败:进入grub出不来
- 解析mysqlbinlog日志_关于mysql-binlog日志解析框架
- 2021年荷兰经济发展研究报告
- 【测试】Appium原理
- 简述冯诺依曼计算机体系结构
- 查询 JetsonNano I2C 的工作频率(波特率)
- js 实现全国省市区三级联动
- 【HDU 4699】Editor【栈】
- win 11 无法打出中文句号问题(中/英文标点切换) 微软五笔输入法
- 利用python生成微信h5_Python + Appium 微信公众号 H5 页面自动化测试
- 2002版《首席执行官》观后感及总结
- Unix时间戳1970Java与Unix时间戳互转
- NOI0107字符串最大跨距