Unity射线检测的方向是 世界坐标系还是自身坐标系

本文详细介绍了Unity中射线检测的基本原理与应用方法。主要内容包括射线检测的概念、Unity中射线检测的具体实现方式,以及如何使用Physics的静态方法Raycast进行射线检测。此外,还通过一个实验来说明射线检测的方向是基于世界坐标系还是自身坐标系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.什么是射线检测:

      就是从一点到另一点或一个方向发射一条射线,检测在这条射线上有没有碰撞到带有碰撞盒的游戏物体,若有就停下来,没有继续向原有方向发射。

2.检测方法

      在Unity中通过Physics的静态方法Raycast,发射一条射线,虽有很多重载,只需记住几个重要的即可。在这里只列出几个重要的重载方法。

      ①:Raycast(Vector3 origin, Vector3 direction, out RaycastHit hitInfo,float maxDistance , int layerMask);

           origin:射线起点,direction:方向,hitInfo:携带碰撞信息的出参,distance:距离(默认无穷大),layerMask:所检测的层(默认是defalut层)

3.Unity射线检测的方向是 世界坐标系还是自身坐标系

    做个实验:在一个平面放2个cube,一个是射线发射方,一个是射线接受方。





    





博主链接:http://my.youkuaiyun.com/baidu_39447417


### Unity 中实现射线检测的方法 在 Unity 中,射线检测是一种常用的技术,用于判断场景中的对象是否被点击或选中。对于 2D 和 3D 场景,射线检测的具体实现有所不同。 #### 创建射线并执行检测 为了创建一条射线并执行检测,在 C# 脚本中通常会使用 `Ray` 类和 `Physics.Raycast` 或者 `Physics2D.Raycast` 方法。下面是一个简单的例子,展示了如何从摄像机位置向鼠标指针的方向发射一条射线,并检测是否有物体被击中[^1]: ```csharp using UnityEngine; public class RaycastExample : MonoBehaviour { void Update() { if (Input.GetMouseButtonDown(0)) { // 获取屏幕坐标下的鼠标位置 Vector3 mousePos = Input.mousePosition; // 将屏幕坐标转换为世界坐标系中的射线 Ray ray = Camera.main.ScreenPointToRay(mousePos); RaycastHit hitInfo; // 执行射线检测 bool didHit = Physics.Raycast(ray, out hitInfo); if (didHit) { Debug.Log($"命中了 {hitInfo.collider.name}"); // 可以在这里处理命中的逻辑 } } } } ``` 这段代码会在每次左键单击时尝试进行一次射线投射操作。如果成功找到碰撞,则打印出所碰到的对象名称[^2]。 #### 设置层掩码(Layer Mask) 有时可能只希望某些特定类型的物体能够响应射线检测。这时可以通过设置 `layerMask` 参数来限定哪些层次上的物体会参与检测过程。例如,假设有一个名为 "InteractiveObjects" 的自定义层,那么可以在编辑器里配置好之后如下所示修改上述脚本[^3]: ```csharp // 定义一个公共变量以便于在Inspector面板设定对应的图层遮罩 [SerializeField] private LayerMask interactiveLayers; ... bool didHit = Physics.Raycast(ray, out hitInfo, Mathf.Infinity, interactiveLayers); ``` 这样做的好处是可以更精确地控制哪些游戏物件应该参与到射线测试当中去。 #### 处理不同维度的空间 需要注意的是,当工作在一个二维空间环境 (`Unity2D`) 下时,应当改用 `Physics2D.Raycast` 函数代替 `Physics.Raycast` 来适应平面几何结构的特点[^4]。 ```csharp if (Physics2D.Raycast(ray.origin, ray.direction, Mathf.Infinity, interactiveLayers)) { // 对应的2D版本处理逻辑... } ``` 此外,针对虚拟现实(VR)或其他特殊输入设备的应用程序开发,还可以考虑调整射线起点的位置,比如基于控制器的手柄位置等[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值