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——射线检测相关推荐

  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射线检测高速飞行的子弹是否打到敌人

    利用射线检测,检测两帧子弹位置连线是否碰撞敌人,并改变敌人状态. 控制敌人射出的子弹的类如下: using System.Collections; using System.Collections.G ...

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

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

  6. 直播笔记 | Unity中射线检测详解

    本文首发于洪流学堂微信公众号. 洪流学堂,学Unity快人几步 你好,我是郑洪智,你的技术探路者. 这周三我们直播剖析了Unity中射线检测的功能,以下是直播内容精华部分笔记. 完整录播:https: ...

  7. Unity学习之Physic.Raycast(射线检测)个人理解分享

    Physics.Raycast参数 public static bool Raycast(Vector3 origin, Vector3 direction, out RaycastHit hitIn ...

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

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

  9. Unity中的射线检测

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

  10. Unity 2019 射线检测失效

    之前在做毕设的一个FPS游戏时,遇到了使用射线检测失效的情况,特此记录以下. 前因 在FPS游戏中,对于子弹的发射主要通过两种方式来实现. 一种可以通过实例化子弹的GameObject对其施加物理效果 ...

最新文章

  1. 批量残差网络-Aggregated Residual Transformations for Deep Neural Networks
  2. mongodb安装_MongoDB事实:商品硬件上每秒插入80000次以上
  3. node exprass安装运行实例
  4. vue 传递多行数据_vue 数据传递的方法
  5. 《少年先疯队》第九次团队作业:Beta冲刺与团队项目验收
  6. 数据结构——归并排序
  7. zynq7020安装linux图形界面,ZYNQ开发板的NFS文件系统安装 - ZYNQ7020学习
  8. ubuntu 16.04 重装失败:进入grub出不来
  9. 解析mysqlbinlog日志_关于mysql-binlog日志解析框架
  10. 2021年荷兰经济发展研究报告
  11. 【测试】Appium原理
  12. 简述冯诺依曼计算机体系结构
  13. 查询 JetsonNano I2C 的工作频率(波特率)
  14. js 实现全国省市区三级联动
  15. 【HDU 4699】Editor【栈】
  16. win 11 无法打出中文句号问题(中/英文标点切换) 微软五笔输入法
  17. 利用python生成微信h5_Python + Appium 微信公众号 H5 页面自动化测试
  18. 2002版《首席执行官》观后感及总结
  19. Unix时间戳1970Java与Unix时间戳互转
  20. NOI0107字符串最大跨距

热门文章

  1. 如何提高FPGA的工作频率
  2. 12、添加和删除页码符号
  3. 一文读懂 Linux 各发行版之间的联系和区别
  4. 将类似html数据打印机,白激光打印机的工作原理.doc
  5. 有限元基础及ANSYS应用 - 第6节 - 自重作用下均匀截面直杆的ANSYS分析
  6. CC2430基础——定时器1试验
  7. 推荐10本大数据领域必读的经典好书(火速收藏)
  8. html5表单提交触发js,JS表单提交中onsubmit事件return的作用
  9. 大数据技术架构_大数据架构流程图
  10. 小程序样式出现 semi-colon expected的解决方案