
👨💻个人主页 :@元宇宙-秩沅
👨💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅!
👨💻 本文由 秩沅 原创
👨💻 收录于专栏:unity每日一记
⭐🅰️推荐文章⭐
⭐【unity本站最全系列】unity常用API大全一篇文章足以

⭐⭐
文章目录
- 
- ⭐🅰️推荐文章⭐
 - ⭐⭐
 - 🎶(==O==)Ray射线检测
 - 
- 射线声明
 - [Physics.Raycast<font color=red > 普通射线](#Physics.Raycast 普通射线)
 - [RaycastHit <font color=red >物体信息类](#RaycastHit 物体信息类)
 - [Physics.RaycastAll <font color=red > 得到多个物体信息](#Physics.RaycastAll 得到多个物体信息)
 - [Physics.RaycastNonAlloc <font color=red >返回的碰撞的数量](#Physics.RaycastNonAlloc 返回的碰撞的数量)
 
 - ⭐🅰️系统路线学习点击跳转⭐
 
 
🎶(O)Ray射线检测
- 
特点
只需要判断一条线和物体的碰撞情况
可以在指定点发射一个指定方向的射线
判断该射线与哪些碰撞器相交,得到对应对象
瞬时
 - 
应用场景
1.鼠标选择场景上一物体
2.FPS射击游戏(无弹道-不产生实际的子弹对象进行移动)等
 
射线声明
API
- Ray X = new Ray(Vector3.right, Vector3.forward);
 
| 参数一 | 参数二 | 
|---|---|
| 起点 | 方向 | 
| X.origin | X.direction | 
- Ray XX = Camera.main.ScreenPointToRay(Input.mousePosition);
屏幕视口坐标转成射线------鼠标点击的地方变成射线 
Physics.Raycast 普通射线
- Physics.Raycast 无法检测碰到了谁,只会检测碰到了没有
 
最多有16个重载
| Physics.Raycast常用参数 | 作用 | 
|---|---|
| 参数一 | 射线 | 
| 参数二 | 检测的最大距离 超出这个距离不检测 | 
| 参数三 | 检测指定层级(不填检测所有层) | 
| 参数四 | 是否忽略触发器 UseGlobal-使用全局设置 Collide-检测触发器 Ignore-忽略触发器 不填使用UseGlobal | 
| 返回值 | bool 当碰撞到对象时 返回 true 没有 返回false | 
            
            
              csharp
              
              
            
          
          //第一种写法
Physics.Raycast(XX, 1000, 
1 << LayerMask.NameToLayer("层级名字"), 
QueryTriggerInteraction.UseGlobal   )
//第二种写法
Physics.Raycast(Vector3.right, Vector3.forward,  
1 << LayerMask.NameToLayer("层级名字"), 
QueryTriggerInteraction.UseGlobal   )
        RaycastHit 物体信息类
- RaycastHit 物体信息类------得到相交的单个物体物理信息

 
| RaycastHit 在Physics.Raycast的应用 | 作用 | 
|---|---|
| 参数一 | 射线 | 
| 参数二 | out RaycastHit 为什么是out ?RaycastHit是结构体 是值类型 out加上去就变成了引用类型,而RaycastHit没有复制所以不用ref | 
| 参数三 | 检测的最大距离 超出这个距离不检测 | 
| 参数四 | 检测指定层级(不填检测所有层) | 
| 参数五 | 是否忽略触发器 UseGlobal-使用全局设置 Collide-检测触发器 Ignore-忽略触发器 不填使用UseGlobal | 
| 返回值 | bool 当碰撞到对象时 返回 true 没有 返回false | 
            
            
              csharp
              
              
            
          
          //写法一
      RaycastHit YY;   
     if( Physics.Raycast(XX, out YY, 1000, 
     
     1<<LayerMask.NameToLayer("层级名字"), 
     
     QueryTriggerInteraction.UseGlobal) )
     
//写法二
if( Physics.Raycast(Vector3.right, Vector3.forward, out YY, 1000,
 
     1<<LayerMask.NameToLayer("层级名字"), 
     
     QueryTriggerInteraction.UseGlobal) )
        - 碰撞到物体的名字 YY.collider.gameObject.name;
 - 碰撞到的点 YY.point
 - 法线信息 YY.normal
 - 碰撞到对象的位置 YY.transform.position
 - 碰撞到对象 离自己的距离 YY.distance等等
 
Physics.RaycastAll 得到多个物体信息
- RaycastHit[] XX= Physics.RaycastAll------得到相交的多个物体物理信息
 

特点: 先碰到的在数组的后面
Physics.RaycastNonAlloc 返回的碰撞的数量
- Physics.RaycastNonAlloc------返回的碰撞的数量 通过out得到数据
 
            
            
              csharp
              
              
            
          
            if((r3, XX, 1000, 1 << LayerMask.NameToLayer("Monster"), 
  QueryTriggerInteraction.UseGlobal) > 0 )
 
        {
        }
        ⭐🅰️系统路线学习点击跳转⭐
你们的点赞👍 收藏⭐ 留言📝 关注✅是我持续创作,输出优质内容的最大动力!、
