Unity 之`Physics.Raycast()`方法,射线检测

文章目录

  • 总述
    • 参数解释
    • 形参
      • 前两个变量可以用Ray 来代替
    • 返回值

在这里插入图片描述

总述

当你在Unity中使用Physics.Raycast()方法时,你实际上是在进行一种射线检测,以查看一条射线是否与场景中的碰撞体相交。这可以用来实现很多不同的功能,如点击选择物体、射击命中检测等。以下是Physics.Raycast()方法的详细介绍:

public static bool Raycast(Vector3 origin, Vector3 direction, out RaycastHit hitInfo, float maxDistance = Mathf.Infinity, int layerMask = DefaultRaycastLayers, QueryTriggerInteraction queryTriggerInteraction = QueryTriggerInteraction.UseGlobal)

参数解释

参数解释:

  • origin:射线的起点(3D世界坐标)。
  • direction:射线的方向(3D向量),通常应该是标准化的向量。
  • hitInfo:用于存储射线命中信息的RaycastHit结构的实例。如果命中发生,这个结构将包含有关命中的各种信息。
  • maxDistance:射线的最大长度。这是射线从起点向方向延伸的最大距离。如果射线未与碰撞体相交,或相交点距离起点超过最大距离,那么命中将被认为未发生。默认值为正无穷大(Mathf.Infinity)。
  • layerMask:一个可选的层级遮罩,用于指定射线应该检测哪些碰撞体。只有在指定的层级上的碰撞体会被考虑在内。默认为DefaultRaycastLayers,这通常是场景中的所有层级。
  • queryTriggerInteraction:一个枚举,用于控制射线是否应该与触发器碰撞体发生作用。你可以选择忽略触发器碰撞体,仅与非触发器碰撞体交互,或者与所有碰撞体都进行交互。默认为QueryTriggerInteraction.UseGlobal

形参

Physics.Raycast() 方法有五个必须的形参,以及两个可选的形参。以下是这些形参的详细说明:

  1. origin(必须):

    • 类型:Vector3
    • 描述:射线的起点,即射线发出的位置。
  2. direction(必须):

    • 类型:Vector3
    • 描述:射线的方向,通常应该是标准化的向量。
  3. hitInfo(必须):

    • 类型:out RaycastHit
    • 描述:用于存储射线命中信息的 RaycastHit 结构的实例。如果命中发生,这个结构将包含有关命中的各种信息。
  4. maxDistance(必须,可选):

    • 类型:float
    • 默认值:Mathf.Infinity
    • 描述:射线的最大长度。这是射线从起点向方向延伸的最大距离。如果射线未与碰撞体相交,或相交点距离起点超过最大距离,那么命中将被认为未发生。
  5. layerMask(必须,可选):

    • 类型:int
    • 默认值:DefaultRaycastLayers
    • 描述:一个可选的层级遮罩,用于指定射线应该检测哪些碰撞体。只有在指定的层级上的碰撞体会被考虑在内。
  6. queryTriggerInteraction(必须,可选):

    • 类型:QueryTriggerInteraction
    • 默认值:QueryTriggerInteraction.UseGlobal
    • 描述:一个枚举,用于控制射线是否应该与触发器碰撞体发生作用。你可以选择忽略触发器碰撞体,仅与非触发器碰撞体交互,或者与所有碰撞体都进行交互。

注意 前两个变量 射线的起点以及方向可以用 Ray 类型的变量来代替

前两个变量可以用Ray 来代替

Physics.Raycast() 方法的前两个形参分别是射线的起点和方向。这两个形参可以用一个完整的Ray对象来代替,因为Ray对象包含了起点和方向信息,从而更方便地表示一个射线。

Ray是一个Unity中的结构体,它包含了射线的起点和方向。当你在调用Physics.Raycast()时,你可以直接传递一个Ray对象作为第一个形参,而不需要单独提供起点和方向。

这种方式的好处是:

  1. 更简洁: 你不需要在每次调用Physics.Raycast()时单独提供起点和方向,而是将它们合并成一个Ray对象,使代码更简洁。
  2. 更可读: 传递一个Ray对象可以使代码更易读,因为它更清楚地表示了这是一个射线,并且将起点和方向联系在一起。

以下是使用Ray对象的示例:

Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);  // 创建一个射线
if (Physics.Raycast(ray, out hitInfo, maxDistance)) {// 射线命中了某个物体// 在这里可以处理命中的物体信息
}

在这个示例中,我们创建了一个Ray对象,该对象代表了从主摄像机发出的射线,起点和方向都在ray对象中得到了体现。然后,我们将这个Ray对象传递给Physics.Raycast()方法,用于进行射线命中检测。

综上所述,传递一个Ray对象作为Physics.Raycast()的前两个形参可以提高代码的可读性和简洁性。

返回值

返回值:

  • 类型:bool
  • 描述:如果射线与碰撞体相交,返回 true,否则返回 false

如果Physics.Raycast()返回true,表示射线命中了一个碰撞体,你可以通过hitInfo变量来访问有关碰撞的信息,如:

  • hitInfo.point:碰撞点在世界空间中的位置。
  • hitInfo.normal:碰撞点处的碰撞体法线方向。
  • hitInfo.collider:被命中的碰撞体的引用。
  • 等等。

示例用法:

Ray ray = new Ray(rayOrigin, rayDirection);
if (Physics.Raycast(ray, out hitInfo, maxDistance)) {Debug.Log("Raycast hit at: " + hitInfo.point);Debug.Log("Hit object: " + hitInfo.collider.gameObject.name);
}

这个示例在rayOrigin处发射一条射线,如果射线命中了某个碰撞体,它将输出碰撞点和被命中对象的名称。

请注意,射线命中是基于物理模拟的,因此需要在物理场景中才会生效。同时,射线检测是一种较为简单的碰撞检测方法,适用于许多场景,但在某些情况下可能需要更复杂的碰撞检测方法。

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

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

相关文章

【Flutter】Flutter 使用 device_info_plus 获取设备的制造商、型号等信息

【Flutter】Flutter 使用 device_info_plus 获取设备的制造商、型号等信息 文章目录 一、前言二、安装和基本使用三、实际业务中的用法四、完整示例五、总结 一、前言 在这篇博客中,我将为你介绍一个非常实用的 Flutter 插件:device_info_plus。这个插件…

ESP32应用教程(1)— VL53L3CX距离传感器

文章目录 前言 1 产品概述 1.1 技术规格 1.2 系统框图 1.3 设备引脚分布 2 工作流程 2.1 系统功能描述 2.2 状态机描述 2.3 测距模式说明 3 控制接口 3.1 设备地址 3.2 IC写1个字节数据 3.3 IC读1个字节数据 3.4 IC写多个字节数据 3.5 IC读多个字节数据 3.6 IC…

本地编译angular提示内存溢出

本地遇到编译angular时,报如下错误: FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory 两种解决办法,具体如下: 设置环境变量,见图: 直接在…

Wireshark数据抓包分析之互联网控制报文协议_ICMP

一、实验目的: 通过使用wireshark抓取的ICMP数据包对这个ICMP控制报文进行分析 二、预备知识: 1.ICMP协议概述:ICMP是Internet Control Message Protocol的缩写,即互联网控制报文协议。它是TCP/IP协议族的一个子协议,用于IP主机、…

抖音web主页视频爬虫

需要抖音主页视频爬虫源码的发私信,小偿即可获得长期有效的采集程序。 比构造 s_v_web_id 验证滑块的方法更快,更稳定。

用pytorch实现Resnet

ResNet(Residual Network)是一种深度卷积神经网络架构,由Kaiming He等人于2015年提出。它在计算机视觉领域引起了革命性的变革,使得训练更深的神经网络成为可能,超越了传统网络架构的限制。 ResNet的主要创新在于…

LeetCode——二叉树篇(九)

刷题顺序及思路来源于代码随想录,网站地址:https://programmercarl.com 目录 669. 修剪二叉搜索树 108. 将有序数组转换为二叉搜索树 538. 把二叉搜索树转换为累加树 669. 修剪二叉搜索树 给你二叉搜索树的根节点 root ,同时给定最小边界…

前端需要理解的数据治理与异常监控知识

1 数据治理 前端数据治理的重要指标是准确性和数据,一个数据对象包括数据值和其他元数据。 2 数据上报方式 2.1 Image 通过将采集的数据拼接在图片请求的后面,向服务端请求一个 1*1 px 大小的图片(gif)实现的,设置…

python3高级编程

文章目录 1. Python网络编程1.1 服务器端代码(Server)1.2 客户端代码(Client) 2. 多线程2.1 线程模块2.2 使用 threading 模块创建线程2.3 线程同步2.4 线程优先级队列( Queue) 3. 日期和时间4. SMTP发送邮件4.1 使用Python发送HTML格式的邮件4.2 Python…

WPF基础入门-Class1-布局

WPF基础入门 Class1&#xff1a;布局 1、Grid行列结构 *:按比例设置宽高&#xff0c;eg:0.6* <Grid><!--两行两列--><Grid.RowDefinitions><RowDefinition Height"*"></RowDefinition><RowDefinition></RowDefinition>…

【福利】Google Cloud Next ’23 精彩待发,Cloud Ace 作为联合赞助商提前发福利~

【Cloud Ace 是 Google Cloud 全球战略合作伙伴&#xff0c;在亚太地区、欧洲、南北美洲和非洲拥有二十多个办公室。Cloud Ace 在谷歌专业领域认证及专业知识目前排名全球第一位&#xff0c;并连续多次获得 Google Cloud 各类奖项。作为谷歌云托管服务商&#xff0c;我们提供谷…

什么是算法评价指标

在我们建立一个学习算法时&#xff0c;或者说训练一个模型时&#xff0c;我们总是希望最大化某一个给定的评价指标&#xff08;比如说准确度Acc&#xff09;&#xff0c;但算法在学习过程中又会尝试优化某一个损失函数&#xff08;比如说均方差MSE或者交叉熵Cross-entropy&…

html实现页面切换、顶部标签栏(可删、可切换,点击左侧超链接出现标签栏)

一、在一个页面&#xff08;不跨页面&#xff09; 效果&#xff1a; 代码 <!DOCTYPE html> <html><head><style>/* 设置标签页外层容器样式 */.tab-container {width: 100%;background-color: #f1f1f1;overflow: hidden;}/* 设置标签页选项卡的样式…

基于CMSIS的外设/设备驱动框架

先附上一张CMSIS的结构图 对于基于CMSIS的设备驱动框架开发涉及的文件有CMSIS目录下的&#xff0c;对外设驱动做了统一的驱动模型封装 /** \brief Access structure of the SPI Driver. */ typedef struct _ARM_DRIVER_SPI {ARM_DRIVER_VERSION (*GetVersion) (void)…

理解机制,再探单元工厂的实现原理

最近有点忙,好久没更新文章了,今天继续再研究一下单元工厂的实现机制。为什么我们要这么重视这一块的内容呢?因为用计算机的目的是为了处理大量数据,如果数据量不大,大多情况下用纸就好了,专门用个计算设备的便捷性也就体现不出来。而大量数据的呈现方式的多样性精髓就在…

成集云 | 抖店连接器客户静默下单催付数据同步钉钉 | 解决方案

源系统成集云目标系统 方案介绍 随着各品牌全渠道铺货&#xff0c;主播在平台上直播时客户下了订单后不能及时付款&#xff0c;第一时间客户收不到提醒&#xff0c;不仅造成了客户付款率下降&#xff0c;更大量消耗了企业的人力成本和经济。而成集云与钉钉深度合作&#xff0…

Android App的设计规范

Android App 设计规范是为开发者和设计师提供的一系列准则和建议&#xff0c;以确保应用在 Android 设备上的外观、交互和用户体验保持一致。以下是一些常见的 Android App 设计规范要点&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开…

晨控CK-GW208与三菱L系列PLC以TCP通讯手册

晨控CK-GW208是一款支持标准工业以太网协议的IO-LINK主站网关&#xff0c;方便用户快速便捷的集成到 PLC 等控制系统中。 CK-GW208主站网关集成 8 路 IO-LINK 通信端口&#xff0c;采用即插即用模式&#xff0c;无需繁琐的配置&#xff0c;减轻现场安装调试的工作量。为了满足…

前端需要理解的设计模式知识

设计模式的原则&#xff1a;1. 单一职责原则&#xff08;一个对象或方法只做一件事&#xff09; 2. 最少知识原则&#xff08;尽可能少的实体或对象间互相作用&#xff09; 3. 开放封闭原则&#xff08;软件实体具有可扩展且不可修改&#xff09; 设计模式是通过代码设计经验总…

2023年中国B2B行业研究报告白皮书(完整版)

随着科技的迅猛发展和市场的不断变革&#xff0c;2023年的中国B2B行业正展现出前所未有的活力和潜力。作为一个关键的经济领域&#xff0c;B2B行业在推动企业之间合作、促进供应链优化以及推动整体经济增长方面发挥着至关重要的作用。 今天运营坛为大家整理了一份《2023年中国…