Unity 2D射线基本使用和画线
2D射線可以檢測到掛載了Collider2D的對象(包括isTrigger)。
2D射線常用的是?Physics2D.Raycast 函數。它的描述為 :
“向場景中的碰撞體投射射線。射線投射?類似于從空間中的某個點朝特定方向發射一條光束。在該過程中,可以檢測并報告與光束接觸的任何對象。”
如果發出射線的起點,位于一個碰撞器的內部,檢測到的第一個碰撞對象將是該對象自己。(如果不希望這種情況發生,應考慮改用 collider2D.Raycast 或者 collider2D.cast 方法。前者的描述是:“將光線投射到從碰撞體位置開始的場景中,從而忽略碰撞體本身。”)
在project settings >?Physics2DSettings?里有兩個選項與射線相關:
- Queries Start In Collider (是否檢測射線起點所在的碰撞體)取消勾選的話,將不檢測上述情況中「對象自己的碰撞體」。
- 備注:這也將帶來其他影響:【why】2D射線檢測屏幕某一點是否有物體,檢測不到碰撞(Queries Start In Colliders的坑)
- Queries Hit Triggers (是否檢測Trigger碰撞器)如果不想與檢測Trigger碰撞器的碰撞,可以取消勾選Queries Hit Triggers。
(注意:這樣改變的是全局設置。如不想改變全局設置,應在發出射線時,使用參數帶有 contactFilter 的版本,用contactFilter 定義射線檢測的條件)
為調試提供便利的額外內容
/額外內容/ 定義一條光線:
//參數為:起點坐標,方向向量 Ray2D ray=new Ray2D( transform.position, Vector2.right );/額外內容/ 在編輯器中繪制
Debug.DrawRay( ray.origin, ray.direction, Color.blue );//起點,方向,顏色(可選) //線的長度與射線相同,如當前射線方向向量為Vector2.right即長度為1發出射線,獲取射線碰撞信息:
用一個RaycastHit2D類型的變量?,作為射線檢測結果的容器。
//起點、方向 RaycastHit2D info = Physics2D.Raycast(startPos, Vector2.right); //無限遠//起點、方向、距離: RaycastHit2D info = Physics2D.Raycast( startPos, direction, 10f );//如果已經定義了光線,可以使用光線的信息投射: RaycastHit2D info = Physics2D.Raycast(ray.origin, ray.direction);以上是最簡單的射線使用。射線函數有很多不同參數的版本,實現不同的需求。比如檢測或是不檢測哪些Layer(層):關于Raycast()方法的可選參數LayerMask的使用說明
判斷射線是否發生碰撞、獲取碰撞到的對象 :
繼續前面的代碼。利用RaycastHit2D類型的對象就可以獲得碰撞對象的各種信息。?
if(info.collider!=null)//如果發生了碰撞 {GameObject obj = info.collider.gameObject;if(obj.CompareTag("Enemy"))//用tag判斷碰到了什么對象Debug.Log(obj.name); }?完整示例:向自身的右側發射一條射線,檢測碰到的第一個對象是不是敵人。
using System.Collections; using System.Collections.Generic; using UnityEngine;public class RayTest : MonoBehaviour {Ray2D ray;void Update () {ray=new Ray2D(transform.position,Vector2.right);RaycastHit2D info=Physics2D.Raycast(ray.origin,ray.direction);//Debug.DrawRay(ray.origin,ray.direction,Color.blue);if(info.collider!=null){if(info.transform.gameObject.CompareTag("Enemy")){Debug.LogWarning("檢測到敵人");}else{Debug.Log("檢測到其他對象");}}else{Debug.Log("沒有碰撞任何對象");}} }更多
相關內容總結【Unity2D】射線·碰撞投射·方法總結_煮粥俠_99的博客-CSDN博客射線:Physics2D.Raycast( )必須參數:起點、方向可選參數:距離、Z軸深度、過濾條件(檢測哪些層、是否檢測觸發碰撞器等)out 參數:RaycastHit2D[ ] (存放碰撞返回的結果)返回值:int (表示碰撞結果的個數)/ RaycastHit2D(射線碰撞的結果)備注:如果射線從碰撞體內部發出,可以使用collider2d.Raycast( )方法手冊鏈接:Physics2D-Raycast - Unity 腳本 API與碰撞體相關的射線/投射:.https://blog.csdn.net/yjy99yjy999/article/details/124551072?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22124551072%22%2C%22source%22%3A%22yjy99yjy999%22%7D&ctrtid=mmJNB
總結
以上是生活随笔為你收集整理的Unity 2D射线基本使用和画线的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 射线法学习记录
- 下一篇: Physics.Raycast和Ray(