Ray

news2024/9/22 13:25:04
public Ray(Vector3 origin, Vector3 direction);

射线:origin为起始点,direction为射线方向

 public static bool Raycast(Ray ray);

物理射线监测:返回值为bool型,可以确定射线有无碰撞到碰撞体

public static bool Raycast(Ray ray, out RaycastHit hitInfo);

与上面类似,但能返回出来射线碰撞到的物体的物体信息,如:

public class RayTest : MonoBehaviour
{
    public GameObject cube;
    Ray myRay;

   
   
    void Update()
    {
        myRay=new Ray(cube.transform.position,Vector3.forward);

        RaycastHit hitInfo;
        if(Physics.Raycast(myRay,out hitInfo))
        {
            Debug.Log("transform:"+hitInfo.transform.name+"point:"+hitInfo.point+"normal:"+hitInfo.normal);
        }
    }
}

可知:normal为碰撞到的点所在的面的法向量

RaycastHit是一个结构体,out出来的hitInfo包含:

public Collider collider { get; } 碰撞体

public float distance { get; set; } 碰撞体与射线起始点的距离

public Vector3 normal { get; set; } 碰撞点所在碰撞的法向量

public Vector3 point { get; set; } 碰撞点世界坐标系下的坐标

public Rigidbody rigidbody { get; } 碰撞到的物体的刚体

public Transform transform { get; } 碰撞到的物体的Transform组件

namespace UnityEngine
{
    //
    // 摘要:
    //     Structure used to get information back from a raycast.
    [NativeHeaderAttribute("PhysicsScriptingClasses.h")]
    [NativeHeaderAttribute("Modules/Physics/RaycastHit.h")]
    [NativeHeaderAttribute("Runtime/Interfaces/IRaycast.h")]
    [UsedByNativeCodeAttribute]
    public struct RaycastHit
    {
        //
        // 摘要:
        //     The Collider that was hit.
        public Collider collider { get; }
        //
        // 摘要:
        //     Instance ID of the Collider that was hit.
        public int colliderInstanceID { get; }
        //
        // 摘要:
        //     The impact point in world space where the ray hit the collider.
        public Vector3 point { get; set; }
        //
        // 摘要:
        //     The normal of the surface the ray hit.
        public Vector3 normal { get; set; }
        //
        // 摘要:
        //     The barycentric coordinate of the triangle we hit.
        public Vector3 barycentricCoordinate { get; set; }
        //
        // 摘要:
        //     The distance from the ray's origin to the impact point.
        public float distance { get; set; }
        //
        // 摘要:
        //     The index of the triangle that was hit.
        public int triangleIndex { get; }
        //
        // 摘要:
        //     The uv texture coordinate at the collision location.
        public Vector2 textureCoord { get; }
        //
        // 摘要:
        //     The secondary uv texture coordinate at the impact point.
        public Vector2 textureCoord2 { get; }
        //
        // 摘要:
        //     The Transform of the rigidbody or collider that was hit.
        public Transform transform { get; }
        //
        // 摘要:
        //     The Rigidbody of the collider that was hit. If the collider is not attached to
        //     a rigidbody then it is null.
        public Rigidbody rigidbody { get; }
        //
        // 摘要:
        //     The ArticulationBody of the collider that was hit. If the collider is not attached
        //     to an articulation body then it is null.
        public ArticulationBody articulationBody { get; }
        //
        // 摘要:
        //     The uv lightmap coordinate at the impact point.
        public Vector2 lightmapCoord { get; }
        [EditorBrowsable(EditorBrowsableState.Never)]
        [Obsolete("Use textureCoord2 instead. (UnityUpgradable) -> textureCoord2")]
        public Vector2 textureCoord1 { get; }
    }
}
public static bool Raycast(Ray ray, out RaycastHit hitInfo, float maxDistance);

与上面类似,但不是无限延伸的射线,最后一个参数规定了最大距离

public static bool Raycast(Ray ray, out RaycastHit hitInfo, float maxDistance, int layerMask);

这里的最后一个参数可以设置层级(int型),方法类似于我这一篇讲的Culling Mask

Light组件_J-SL的博客-CSDN博客

当然,也可以通过左移运算符来设置层级

左移运算符<<:左移表示乘以2,左移多少位表示乘以2的几次幂;

右移运算符>>:移动多少位表示除以2的几次幂。

if(Physics.Raycast(myRay,out hitInfo,100,1<<LayerMask.NameToLayer("UI")))
        {
            Debug.Log("transform:"+hitInfo.transform.name+"point:"+hitInfo.point+"normal:"+hitInfo.normal);
        }

这样便可以检测UI层

位运算符:与(&)、非(~)、或(|)、异或(^)、<<(左移)、>>(右移)

想要检测多个层级可以:

if(Physics.Raycast(myRay,out hitInfo,100,1<<LayerMask.NameToLayer("UI")|1<<LayerMask.NameToLayer("Default")))
        {
            Debug.Log("transform:"+hitInfo.transform.name+"point:"+hitInfo.point+"normal:"+hitInfo.normal);
        }

在应用方面,射线检测在3d射击游戏中,将屏幕坐标系转换成空间坐标系,可以直接:

Camera.main.ScreenPointToRay(Input.mousePosition);

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

isp调试工具环境搭建及其介绍!

一、isp调试环境搭建&#xff1a; 后期调试isp&#xff0c;是在rv1126提供的RKISP2.x Tuner工具上进行调试&#xff0c;所以我们大前提必须要把这个环境和一些操作先搞熟悉来&#xff0c;后面有一些专用术语&#xff0c;我们遇到了再去看&#xff0c;现在专门看一些专用术语&am…

Spring Cloud简单记录

1. Spring Cloud是什么 工作这么多年&#xff0c;哈哈。。。没深入理解spring&#xff0c;spring cloud也是没有用过。趁着周末&#xff0c;搞一搞概念&#xff0c;先搞清楚是什么&#xff0c;虽然是什么只有用过之后才能理解的更具体&#xff0c;但是还是需要先整体的熟悉一下…

联想拯救者如何开启独显直连

不同机型有不同的切换方式&#xff0c;下面就分别给大家讲一下&#xff1a; 显卡模式切换方式一&#xff1a; 打开联想电脑管家&#xff0c;选择游戏模式&#xff0c;在左侧菜单栏选择显卡模式&#xff0c;然后就能看到显卡的输出模式了&#xff0c;默认是混合模式&#xff0c…

React之组件的生命周期

React之组件的生命周期 一、概述二、整体说明三、挂载阶段四、更新阶段五、卸载阶段 一、概述 生命周期:一个事务从创建到最后消亡经历的整个过程组件的生命周期&#xff1a;组件从被创建到挂载到页面中运行&#xff0c;再到组件不用时卸载的过程意义&#xff1a;理解组件的生…

RT1052的定时器

文章目录 1 通用定时器1.1 定时器框图1.2 实现周期性中断 2 相关寄存器3 定时器配置3.1 时钟使能3.2 初始化GPT1定时器3.2.1 base3.2.2 initConfig3.2.2.1 clockSorce3.2.2.2 divider3.2.2.3 enablexxxxx 3.3 设置 GPT1 比较值3.3.1 base3.3.2 channel3.3.3 value 3.4 设置 GPT…

10-矩阵(matrix)_方阵_对称阵_单位阵_对角阵

矩阵及其运算 [ a 11 ⋯ a 1 n ⋯ ⋯ ⋯ a m 1 ⋯ a m n ] \begin{bmatrix} a_{11} & \cdots & a_{1n} \\ \cdots & \cdots & \cdots \\ a_{m1} & \cdots & a_{mn} \\ \end{bmatrix} ​a11​⋯am1​​⋯⋯⋯​a1n​⋯amn​​ ​ 矩阵就是二维数组&…

【Golang 接口自动化02】使用标准库net/http发送Post请求

目录 写在前面 发送Post请求 示例代码 源码分析 Post请求参数解析 响应数据解析 验证 发送Json/XMl Json请求示例代码 xml请求示例代码 总结 资料获取方法 写在前面 上一篇我们介绍了使用 net/http 发送get请求&#xff0c;因为考虑到篇幅问题&#xff0c;把Post单…

华为OD机试真题 Java 实现【输出指定字母在字符串的中的索引】【2023 B卷 100分】,附详细解题思路

目录 专栏导读一、题目描述二、输入描述三、输出描述说明&#xff1a; 四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#x…

四年前没做成的跑腿代驾平台,四年后再做也许就成了

​几年前新零售概念大火&#xff0c;不止是传统门店商家蠢蠢欲动&#xff0c;很多传统行业都在试图搭上互联网的快车&#xff0c;在传统实体中脱颖而出。当时炒的最热的除了社区团购、智慧门店就是同城跑腿、搬家、拉货、代驾代买这类服务型了。 社区团购几乎是各家杀的头破血流…

Zabbix分布式监控快速入门

目录 1 Zabbix简介1.1 软件架构1.2 版本选择1.3 功能特性 2 安装与部署2.1 时间同步需求2.2 下载仓库官方源2.3 Zabbix-Server服务端的安装2.3.1 安装MySQL2.3.1.1 创建Zabbix数据库2.3.1.2 导入Zabbix库的数据文件 2.3.2 配置zabbix_server.conf2.3.3 开启Zabbix-Server服务2.…

Day47 算法记录|动态规划14子序列

子序列 1143. 最长公共子序列1035.不相交的线53. 最大子数组和 1143. 最长公共子序列 这道题和718. 最长重复子数组的区别&#xff1a;这道题的子序列可以不连续 这个视频讲解的很好 class Solution {public int longestCommonSubsequence(String text1, String text2) {char…

打开域名跳转其他网站,官网被黑解决方案(Linux)

某天打开网站&#xff0c;发现进入首页&#xff0c;马上挑战到其他赌博网站。 事不宜迟&#xff0c;不能让客户发现&#xff0c;得马上解决 我的网站跳转到这个域名了 例如网站跳转到 k77.cc 就在你们部署的代码的当前文件夹下面&#xff0c;执行下如下命令 find -type …

SQL-每日一题【1075. 项目员工 I】

题目 项目表 Project&#xff1a; 员工表 Employee&#xff1a; 请写一个 SQL 语句&#xff0c;查询每一个项目中员工的 平均 工作年限&#xff0c;精确到小数点后两位。 查询结果的格式如下&#xff1a; 解题思路 前置知识 AVG 函数 定义和用法&#xff1a; AVG 函数返回数…

基于ARM+FPGA (STM32+ Cyclone 4)的滚动轴承状态监测系统

状态监测系统能够在故障早期及时发现机械设备的异常状态&#xff0c;避免故障的 进一步恶化造成不必要的损失&#xff0c;滚动轴承是机械设备的易损部件&#xff0c;本文对以滚动 轴承为研究对象的状态监测系统展开研究。现有的监测技术多采用定时上传监 测数据&#xff0c;…

【Spring AOP + 自定义注解 + 数据源 实现主从库切换读写分离】—— 案例实战

&#x1f4a7; S p r i n g A O P 主从数据源切换 读写分离 自定义注解案例实战&#xff01; \color{#FF1493}{Spring AOP 主从数据源切换 读写分离 自定义注解 案例实战&#xff01;} SpringAOP主从数据源切换读写分离自定义注解案例实战&#xff01;&#x1f4a7; …

提升开发效率,Lombok的链式编程和构建模式

目录 链式编程 定义 代码示例 ​编辑 Accessors(chaintrue) 开启链式编程 ​编辑 Accessors(chain true,fluent true) 去除set和get 构建模式 定义 代码示例 ​编辑 踩坑 Singular 定义 代码示例 踩坑默认值情况 ​编辑 With 定义 代码示例 链式编程 定义 链…

SQL-每日一题【1070. 产品销售分析 III】

题目 销售表 Sales&#xff1a; 产品表 Product&#xff1a; 编写一个 SQL 查询&#xff0c;选出每个销售产品 第一年 销售的 产品 id、年份、数量 和 价格。 结果表中的条目可以按 任意顺序 排列。 查询结果格式如下例所示&#xff1a; 示例 1&#xff1a; 解题思路 前置知…

永恒之蓝复现(ms17-010)

目录标题 一、漏洞原理二、影响版本三、永恒之蓝复现复现环境复现过程1.主机发现 2.使用MSF的永恒之蓝漏洞模块3.使用ms17-010扫描模块&#xff0c;对win7进行扫描4.使用ms17-010攻击模块&#xff0c;对win7进行攻击5.得到win7权限6.通过shell对win7进行控制 一、漏洞原理 永恒…

第101章#远程调试西门子PLC(明牛智能网关)入门

一、下载明牛网站上的MNConfig&#xff08;用于配置MNGate系列产品&#xff09;。 二、注册账号。 三、用注册的账号登录MNConfig 四、在左侧BOX列表中,点击BOX列表—右键—添加BOX 五、选择联网方式&#xff0c;一般都是用的4G。 可以用自己的手机卡进行测试。 1、插入4G卡&am…

【Docker 那些事儿】如何安全地进入到容器内部

文章目录 &#x1f31f; 前言1. 容器运行&#x1f347; 自动重启的容器&#x1f347; 自定义名称的容器&#x1f347; 开启端口的容器&#x1f347; 与宿主机共享目录的容器 2. 进入容器2.1 容器的三种状态&#x1f351; 运行状态&#x1f351; 暂停状态&#x1f351; 终止状态…