Unity 射线检测

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

1. 定义

在Unity中,射线检测(Raycasting)是一种常用的技术,用于检测射线是否与场景中的物体相交。这在游戏开发中用于实现点击物体、射线武器的碰撞检测、角色与环境的交互等方面非常有用。

2. 重要类和方法

2.1 Ray

定义:表示从一个点沿着特定方向延伸的虚拟线段
属性:

  • direction 射线的方向。
  • origin 射线的原点。

构造函数:

public Ray (Vector3 origin, Vector3 direction);

在场景中绘制射线(仅在 Debug 下可见):

 // 创建射线
Ray ray = new Ray(Vector3.zero, Vector3.forward);

// 在场景中绘制射线,可选操作(仅用于调试目的)
Debug.DrawRay(ray.origin, ray0.direction * 10f, Color.red);

2.2 从屏幕发出射线:

Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

void Update()
{
     if (Input.GetMouseButton(0)) 
     {
         Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
         Debug.DrawRay(ray.origin, ray.direction * 10f, Color.red);
     }
 }

2.3 Raycast

定义:射线检测获取相交的单个物体,它可以检测射线是否与某个物体相交,如果相交,还可以获取有关交点的信息

bool Raycast(Ray ray, out RaycastHit hitInfo, float maxDistance, int layerMask);
参数含义:
Ray——射线对象
RaycastHit——碰撞(相交)对象信息
maxDistance——射线检测的最大距离
layerMask——层蒙版(用于只检测特定层对象)
返回值含义:
bool——当射线和物体相交时返回true

void Update()
{
    if (Input.GetMouseButtonDown(0)) 
    {
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
        
        RaycastHit hitInfo;
        if (Physics.Raycast(ray, out hitInfo))
        {
            // 射线与物体相交
            Debug.Log($"Name:{hitInfo.collider.name},Point:{hitInfo.point}");
        }
    }
}

Unity 射线检测,Unity 学习笔记,unity,游戏引擎

2.4 RaycastAll

定义:射线检测获取相交的多个物体
RaycastHit[] RaycastAll(Ray ray, float maxDistance, int layerMask);
RaycastHit[]——当射线和物体相交时,返回相交的物体们,如果没有碰撞到,数组长度为0

void Update()
{
    if (Input.GetMouseButtonDown(0)) 
    {
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
        
        RaycastHit[] hitInfos;
        hitInfos = Physics.RaycastAll(ray, int.MaxValue);
        
        // 射线与物体相交
        foreach (var item in hitInfos)
        {
            Debug.Log($"Name:{item.collider.name},Point:{item.point}");
        }       
    }
}

Unity 射线检测,Unity 学习笔记,unity,游戏引擎

2.5 RaycastHit 碰撞信息

Unity 射线检测,Unity 学习笔记,unity,游戏引擎

2.6 layerMask 让射线检测只检测指定层级的对象

LayerMask.NameToLayer(层名):根据层名字转换为层编号的方法
层编号:
Unity 射线检测,Unity 学习笔记,unity,游戏引擎
1 << LayerMask.NameToLayer(“Cube”)

void Update()
{
    if (Input.GetMouseButtonDown(0)) 
    {
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
    
        RaycastHit hitInfo;
        // 1 << LayerMask.NameToLayer("Cube") 将 1 左移得到的层级编号位数,得到层级编号的二进制
        if (Physics.Raycast(ray, out hitInfo, int.MaxValue, 1 << LayerMask.NameToLayer("Cube")))
        {
            // 射线与物体相交
            Debug.Log($"Name:{hitInfo.collider.name},Point:{hitInfo.point}");
        }
    }
}

Unity 射线检测,Unity 学习笔记,unity,游戏引擎文章来源地址https://www.toymoban.com/news/detail-646558.html

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

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

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

相关文章

  • unity中的射线碰撞检测

    在Unity中,射线碰撞检测是一种常用的技术,通常用于确定射线与场景中的物体是否相交,并获取相交点的信息。 1.创建射线: 使用 Ray 类或 RaycastHit 结构体创建射线。 Ray 表示射线的起点和方向,而 RaycastHit 用于存储射线与物体相交的信息,如相交点、法线等。 2.发射射线:

    2024年03月17日
    浏览(42)
  • 【超级入门】Unity如何实现画射线+射线检测+NavMeshAgent结合

           “射线检测 是在3D数字世界里选择某个特定物体常用的一种技术,如在3D、VR游戏中检测子弹命中敌人情况或者从地上捡起一支枪,这都要用到 射线检测 , 射线检测 是在3D数字空间中选择虚拟物体的最基本方法。 ” 效果: 我们先创建一个物体,挂脚本 RayTest ,代码

    2024年02月15日
    浏览(38)
  • 第二十八章 Unity射线检测

    本章节我们介绍一下射线。射线就是从一个固定点向一个方向发射出一条直线,在发射过程中需要判断该射线有没有与游戏物体发送碰撞。射线既可以用来检测射击游戏中武器指向目标;又可以判断鼠标是否指向游戏物体。射线的创建方式,一般使用代码来实现。接下来,我

    2024年02月11日
    浏览(62)
  • Unity Physics2D 2d物理引擎游戏 笔记

    2d 材质 里面可以设置 摩擦力 和 弹力 Simulated:是否在当前的物理环境中模拟,取消勾选该框类似于Disable Rigidbody,但使用这个参数更加高效,因为Disable会销毁内部产生的GameObject,而取消勾选Simulated只是禁用。 Kinematic 动力学刚体 动力学刚体不受重力和力的影响,而受用户的

    2023年04月24日
    浏览(124)
  • Unity3d 射线检测

    射线碰撞单个物体: 方式1:从摄像机向世界发射一条射线,通常用于检测鼠标指针有没有选择物体 方式2:创建从一个点到一个方向的射线 声明一个射线碰撞信息类 //进行碰撞检测并返回结果,检测信息会写入碰撞信息类 射线碰撞多个物体: 例:可以用射线检测人物与地面

    2024年02月08日
    浏览(41)
  • Unity 射线与碰撞范围检测【踩坑记录】

    射线检测在2D和3D的区别比较大 一定要加上对应的Collider组件 对应的函数只检测对应的Collider, Physics.Raycast 是不会检测到Collider 2D的(这个让我有一次debug了好久才发现) 对应API如下 可以使用 Debug.DrawLine(Vector3 origin,Vector3 destination,Color color) 和 Debug.DrawRay(Vector3 origin,Vector3 dir

    2023年04月08日
    浏览(38)
  • Unity 之`Physics.Raycast()`方法,射线检测

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

    2024年02月11日
    浏览(42)
  • Unity 中检测射线穿过的所有的物体

     在开发中 有个需求,射线要检测所有穿过的物体。 代码如下:   运行结果  

    2024年02月14日
    浏览(39)
  • Unity在物体内部发射射线检测不到物体的解决方式

    在Unity2018.1.18上不大好用。

    2024年02月15日
    浏览(36)
  • Unity UGUI的PhysicsRaycaster (物理射线检测)组件的介绍及使用

    PhysicsRaycaster是Unity UGUI中的一个组件,用于在UI元素上进行物理射线检测。它可以检测鼠标或触摸事件是否发生在UI元素上,并将事件传递给相应的UI元素。 PhysicsRaycaster通过发射一条射线来检测UI元素。当射线与UI元素相交时,PhysicsRaycaster会将事件传递给相应的UI元素。 Event

    2024年02月15日
    浏览(46)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包