Unity 关于Ray、RaycastHit、Raycast及其使用

Unity中,我们要进行物理模拟和碰撞检测时,有三个重要的概念Ray、RaycastHit、Raycast。

其中,Ray可以理解为射线,它是一条从起点沿着特定方向延伸的无限长线段。

它的语法是:

Ray(Vector3 origin, Vector3 direction)

它定义了两个参数,一个起点位置和一个方向,通过Ray射线,可以用来模拟子弹、光线、玩家视线等。

RaycastHit可以理解为射线命中信息,他是一个数据结构,用于存储射线投射过程中的结果。当进行射线投射后,如果射线与场景中的物体相交,RaycastHit会存储与射线相交的物体的信息,如下图:

其中常用信息有:

  • collider:相交物体的碰撞器组件。
  • point:相交点的位置。
  • normal:相交点的法线方向。
  • distance:射线起点到相交点的距离。

 一般我们通过使用Physics类的Raycast方法进行射线投射,然后把射线命中信息存储与RaycastHit。

Raycast则可以理解为射线投射,它是Physics类中的一种用于检测场景中物体碰撞的方法。我们使用该方法可以进行射线投射获取碰撞相关信息。

它的语法多大16个,但是我们常用的是:

bool Physics.Raycast(Ray ray, out RaycastHit hitInfo, float maxDistance, int layerMask);

其中, 

  • ray:要投射的射线对象。
  • hitInfo:射线命中信息将存储在这个参数中。
  • maxDistance:射线的最大投射距离。
  • layerMask(可选):用于指定投射检测的层级。

Raycast方法会返回一个bool值,表示射线是否与物体相交。如果相交,射线命中信息将存储在hitInfo参数中。 

综上所述,我们通过结合Ray、RaycastHit、Raycast这三个要素,就能实现非常好用的功能,比如在物理模拟、碰撞检测以及鼠标点击等场景,就有很大用处。

比如:

1、检测射线与物体的碰撞并获取相关信息:

Ray ray = new Ray(origin, direction);
RaycastHit hit;
if (Physics.Raycast(ray, out hit, maxDistance))
{// 射线与物体相交,可以获取碰撞点、碰撞法线、碰撞物体信息等Vector3 hitPoint = hit.point;Vector3 hitNormal = hit.normal;if(hit.collider.name=="xx" || hit.collider.tag =="xx"){//dosomething}    
}

2、拾取物体:

Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if (Physics.Raycast(ray, out hit))
{// 射线与物体相交,拾取物体GameObject pickedObject = hit.collider.gameObject;// 然后进行相关控制
}

3、还有特别常用的鼠标点击发射射线检测碰撞:

if (Input.GetMouseButtonDown(0))
{Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);RaycastHit hit;if (Physics.Raycast(ray, out hit)){// 射线与物体相交,处理鼠标点击事件GameObject clickedObject = hit.collider.gameObject;//。。。}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/256093.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

多路径传输(MPTCP MPQUIC)数据包调度研究总结

近些年来,以5G和Wifi6为代表的无线通信技术发展迅速,并已经在全世界实现了大规模部署。此外,智能手机等移动设备不断迭代更新,其网络通信能力也持续演进,使得应用同时利用多个不同网卡在多条不同物理链路上&#xff08…

2023-2024-1-高级语言程序设计-第2次月考编程题

注:此前已发布过的题解不再发布(原题请在下面位置进行搜索)。 7-1-2 排序(算法任意) 本题要求将给定的n个整数从大到小排序后输出(可使用任意排序算法)。 输入格式: 输入第一行给出一个不超过10的正整数n。第二行给…

【Docker】Swarm的ingress网络

Docker Swarm Ingress网络是Docker集群中的一种网络模式,它允许在Swarm集群中运行的服务通过一个公共的入口点进行访问。Ingress网络将外部流量路由到Swarm集群中的适当服务,并提供负载均衡和服务发现功能。 在Docker Swarm中,Ingress网络使…

如何使用HadSky搭配内网穿透工具搭建个人论坛并发布至公网随时随地可访问

文章目录 前言1. 网站搭建1.1 网页下载和安装1.2 网页测试1.3 cpolar的安装和注册 2. 本地网页发布2.1 Cpolar临时数据隧道2.2 Cpolar稳定隧道(云端设置)2.3 Cpolar稳定隧道(本地设置)2.4 公网访问测试 总结 前言 经过多年的基础…

ORA-600 kcbzib_kcrsds_1一键恢复

一个19c库由于某种原因redo损坏强制打开库报ORA-600 kcbzib_kcrsds_1错误 SQL> startup mount pfile?/database/pfile.txt; ORACLE instance started. Total System Global Area 859830696 bytes Fixed Size 9034152 bytes Variable Size 5…

Android平板还能编程?Ubuntu本地安装code-server远程编程写代码

文章目录 1.ubuntu本地安装code-server2. 安装cpolar内网穿透3. 创建隧道映射本地端口4. 安卓平板测试访问5.固定域名公网地址6.结语 1.ubuntu本地安装code-server 准备一台虚拟机,Ubuntu或者centos都可以,这里以VMwhere ubuntu系统为例 下载code server服务,浏览器…

TCP通讯

第二十一章 网络通信 本章节主要讲解的是TCP和UDP两种通信方式它们都有着自己的优点和缺点 这两种通讯方式不通的地方就是TCP是一对一通信 UDP是一对多的通信方式 接下来会一一讲解 TCP通信 TCP通信方式呢 主要的通讯方式是一对一的通讯方式,也有着优点和缺点…

Spring AOP从入门到精通

目录 1. AOP的演化过程 1. 代理模式 2. 动态代理 2.1 JDK动态代理 2.2 Cglib动态代理 3. Spring模式 3.1 ProxyFactory 3.2 ProxyFactoryBean 3.3 AbstractAutoProxyCreator 2. Spring AOP抽象 1. 核心术语 1.1 连接点(JoinPoint) 1.2 切点(Pointcut) 1.3 增强(Ad…

使用Java网络编程,窗口,线程,IO,内部类等实现多人在线聊天1.0

1.整体思路 思路图 整体思路如上: 涉及知识点:线程网络编程集合IO等 TCP 协议 2.代码实现过程 服务端 import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import jav…

【C语言快速学习基础篇】之一基础类型、进制转换、数据位宽

文章目录 一、基础类型(根据系统不同占用字节数会有变化)1.1、有符号整形1.2、无符号整形1.3、字符型1.4、浮点型1.5、布尔型 二、进制转换2.1、二进制2.2、八进制2.3、十进制2.4、十六进制2.5、N进制2.6、进制转换关系对应表 三、数据位宽3.1、位3.2、字节3.3、字3.4、双字3.5…

【云原生-K8s】镜像漏洞安全扫描工具Trivy部署及使用

基础介绍基础描述Trivy特点 部署在线下载百度网盘下载安装 使用扫描nginx镜像扫描结果解析json格式输出 总结 基础介绍 基础描述 Trivy是一个开源的容器镜像漏洞扫描器,可以扫描常见的操作系统和应用程序依赖项的漏洞。它可以与Docker和Kubernetes集成,…