👨?💻個人主頁:@元宇宙-秩沅
👨?💻 hallo 歡迎 點贊👍 收藏? 留言📝 加關注?!
👨?💻 本文由 秩沅 原創
👨?💻 收錄于專欄:unity每日一記
?🅰?推薦文章?
?【軟件設計師高頻考點暴擊】
?【Unityc#專題篇】之c#系統化大禮包】
?【unity數據持久化】數據管理類_PlayerPrfs
?【unity本站最全系列】unity常用API大全一篇文章足以
??
文章目錄
- ?🅰?推薦文章?
- ??
- 🎶(==O==)Ray射線檢測
- 射線聲明
- Physics.Raycast<font color=red > 普通射線
- RaycastHit <font color=red >物體信息類
- Physics.RaycastAll <font color=red > 得到多個物體信息
- Physics.RaycastNonAlloc <font color=red >返回的碰撞的數量
- ?🅰?系統路線學習點擊跳轉?
🎶(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 |
//第一種寫法
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 |
//寫法一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得到數據
if((r3, XX, 1000, 1 << LayerMask.NameToLayer("Monster"), QueryTriggerInteraction.UseGlobal) > 0 ){}
?🅰?系統路線學習點擊跳轉?
?【Unityc#專題篇】之c#進階篇】
?【Unityc#專題篇】之c#核心篇】
?【Unityc#專題篇】之c#基礎篇】
?【Unity-c#專題篇】之c#入門篇】
?【Unityc#專題篇】—進階章題單實踐練習
?【Unityc#專題篇】—基礎章題單實踐練習
?【Unityc#專題篇】—核心章題單實踐練習
你們的點贊👍 收藏? 留言📝 關注?是我持續創作,輸出優質內容的最大動力!、