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

这篇具有很好参考价值的文章主要介绍了Unity 关于Ray、RaycastHit、Raycast及其使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

它的语法是:

Ray(Vector3 origin, Vector3 direction)

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

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

unity ray,unity,游戏引擎,c#

其中常用信息有:

  • 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、还有特别常用的鼠标点击发射射线检测碰撞:文章来源地址https://www.toymoban.com/news/detail-769337.html

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

到了这里,关于Unity 关于Ray、RaycastHit、Raycast及其使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity 之 RaycastHit(存储射线投射操作)

    RaycastHit 类是 Unity 中的一个结构,用于存储射线投射操作的结果。射线投射是一种常用的技术,用于检测场景中的碰撞、获取碰撞点、获取碰撞对象的信息等。 RaycastHit 提供了关于射线与场景中对象的交互信息,包括碰撞点、碰撞法线、碰撞对象等。以下是关于 RaycastHit 的详

    2024年02月05日
    浏览(36)
  • 在 3ds Max 中使用Mental Ray渲染 wip 图像

    推荐: NSDT场景编辑器助你快速搭建可二次开发的3D应用场景 本教程面向初学者,每个步骤都详细概述和显示。如果您是 3D Studio MAX 的新手,您可能想先尝试我们的其他一些教程。 使用默认的 3D Studio MAX 渲染器创建粘土渲染 步骤 1  在 3D Studio Max 中 启动一个新场景并向场景添

    2024年02月16日
    浏览(45)
  • 【ChatGPT】在20分钟内使用 LangChain + Ray构建自托管问答服务

    This is part 3 of a blog series. In this blog, we’ll show you how to build an LLM question and answering service. In future parts, we will optimize the code and measure performance: cost, latency and throughput. 这是博客系列的第 3 部分。在本博客中,我们将向您展示如何构建LLM问答服务。在以后的部分中,我们将优化代码

    2024年02月03日
    浏览(54)
  • 【ChatGPT】使用 LangChain 和 Ray 实现 100 行代码构建 LLM 开源搜索引擎【1】

    目录 Introduction Building the index 构建索引 Accelerating indexing using Ray 使用 Ray 加速索引编制 Serving

    2024年02月08日
    浏览(45)
  • YOLOv8超参数调优教程! 使用Ray Tune进行高效的超参数调优!

    原创文章为博主个人所有,未经授权不得转载、摘编、倒卖、洗稿或利用其它方式使用上述作品。违反上述声明者,本站将追求其相关法律责任。 这篇博文带大家玩点新的东西,也是一直以来困扰大家最大的问题— 超参数调优 ! 之前的 YOLOv5 我使用遗传算法做过很多次调优

    2024年02月09日
    浏览(52)
  • 如何在 3ds Max 中使用 Mental Ray 制作逼真的草地和带有光晕的天空

    推荐: NSDT场景编辑器助你快速搭建可二次开发的3D应用场景   首先,您将创建一个 平面 对象,然后添加一个 噪点修改器。 在此之上应用毛 发和毛皮 修饰符 。  这将用于模拟逼真的草地。 我们用 日光系统 创造太阳和天空。为太阳添加 镜头 和 戒指 效果以及酷炫的逼真效

    2024年02月16日
    浏览(46)
  • Unity 之`Physics.Raycast()`方法,射线检测

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

    2024年02月11日
    浏览(39)
  • 分布式计算框架:Spark、Dask、Ray 分布式计算哪家强:Spark、Dask、Ray

    目录 什么是分布式计算 分布式计算哪家强:Spark、Dask、Ray 2 选择正确的框架 2.1 Spark 2.2 Dask 2.3 Ray 分布式计算是一种计算方法,和集中式计算是相对的。 随着计算技术的发展, 有些应用需要非常巨大的计算能力才能完成,如果采用集中式计算,需要耗费相当长的时间来完成

    2024年02月11日
    浏览(64)
  • unity,Physics2D.Raycast函数

    Unity中用于进行2D射线检测的函数:Physics2D.Raycast。它会从给定的起点位置发射一条射线,检测是否与场景中的2D物体相交,并返回相交的信息。 Physics2D.Raycast函数的作用是进行2D射线检测,主要用于以下场景: 在2D游戏开发中,射线检测是一个常用的技术,可以用于实现多种功

    2024年02月01日
    浏览(78)
  • Ray Casting:光线投射

    本次作业完成的是通过正交相机投影+ray casting方式渲染,得到一个场景中有若干个球形的图片,并以深度测试后直接显示色彩和简单限制深度后显示两种方式来显示。 目录 原理  结果 github连接         在不考虑二次反射和多次反射的情况下,Ray casting只需要从相机到当前画

    2024年02月15日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包