日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Unity 2D射线基本使用和画线

發布時間:2023/12/8 编程问答 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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射线基本使用和画线的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。