溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Unity中Raycast射線檢測怎么用

發(fā)布時間:2021-12-13 16:11:27 來源:億速云 閱讀:1014 作者:小新 欄目:大數(shù)據(jù)

這篇文章給大家分享的是有關(guān)Unity中Raycast射線檢測怎么用的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

項目地址:Raycast - SouthBegonia (https://github.com/SouthBegonia/UnityWorld/tree/master/Raycast)

Unity中Raycast射線檢測怎么用

Unity中Raycast射線檢測怎么用

Ray 射線

  • 含義:官方解釋為一條無窮的線,開始于origin點,朝向direction方向(但是,根據(jù)項目驗證來看其默認(rèn)長度為單位向量,只有對direction進行乘以倍率,才可實現(xiàn)延長射線,而非無窮)

  • 用法:

    Ray ray = new Ray(transform.position,transform.forward)
    Ray camerRay = Camera.main.ScreenPointToRay(Input.mousePosition)

RaycastHit 光線投射碰撞信息

  • 含義:取得從Raycast函數(shù)中得到的碰撞信息(注意不是collider哈,是包含collider信息)

  • 關(guān)鍵變量:point、collider、rigidbody、transform

檢測方法 - 線型檢測

Physics.Raycast 光線投射

  • 功能:在已有一條射線(也可無)的基礎(chǔ)上,使用射線(新建射線)進行一定距離內(nèi)的定向檢測??尚薷纳渚€長度,限制其檢測的Layer層,并且可以得到射線檢測到的碰撞信息。但僅能檢測到 第一個被射線碰撞的物體 ,后面的物體無法被檢測到

  • 用法:

    Raycast(transform.position, Vector.forward, distance, LayerMask.GetMask("Enemy"))
    Raycast(transform.position, Vector.forward, distance, out RaycastHitInformation ,LayerMask.GetMask("Enemy"))
    Raycast (MyRay, distance, LayerMash.GetMask("Enemy"))
    Raycast (MyRay, out RaycastHitInformation, distance, LayerMask.GetMask("Enemy"))
  • 適用場合:配合相機坐標(biāo)轉(zhuǎn)換實現(xiàn)各類交互

Physics.RaycastAll 所有光線投射

  • 功能:機理用法大致同Raycast,當(dāng)區(qū)別在于可檢測射線路徑上的 所有物體 ,返回檢測信息的數(shù)組。其他帶All后綴的方法也同理

  • 用法:

    RaycastHit[] hits = RaycastAll(Vector3.zero, Vector.forward, distance, LayerMask.GetMask("Enemy"))
    RaycastHit[] hits = RaycastAll(MyRay, distance, LayerMash.GetMask("Enemy"))
  • 適用場合:穿透性檢測

Physics.Linecast 線段投射

  • 功能:建立 某兩點之間 的射線進行檢測,返回bool類型

  • 用法:

    Linecast(startPos, endPos, LayerMask.GetMask("Enemy"))
    Linecast(startPos, endPos, out RaycastHit, LayerMask.GetMask("Enemy"))
  • 適用場合:特定地點局部距離射線檢測

檢測方法 - 體型檢測

Physics.SphereCast 球體投射

  • 功能:擴展檢測范圍為球形,返回bool類型。但是該投射用法需要萬分小心,見下

  • 用法:

    SphereCast (originPos, radius, direction, out RaycastHit, distance, LayerMask.GetMask("Enemy"))
    SphereCast (Ray, radius, out RaycastHit, distance, LayerMask.GetMask("Enemy"))
  • 適用場合:檢測目的地是否可抵達,從而判斷可移動性

Physics.Boxcast 塊體投射/ CapsuleCast 膠囊體投射

  • 功能:同球體投射

  • 用法:同球體投射

Physics.OverlapSphere 相交球

  • 功能:同樣檢測球形,但與SphereCast存在較大區(qū)別

  • 用法:

    • Collider[] hits = Physics.OverlapSphere(startPos, radius, LayerMask.GetMask("Enemy")) :以startPos為原點,創(chuàng)建半徑為radius的球形,檢測區(qū)域為整個球形包圍體(實心),檢測Enemy層上的物體,返回所有碰撞物體的collider而不是RaycastHit

  • 適用場合:檢測掛載物體球形范圍內(nèi)是否存在碰撞,常用方法

Physics.IgnoreCollision 忽略碰撞

IgnoreCollision (collider1, collider2, ignore)

感謝各位的閱讀!關(guān)于“Unity中Raycast射線檢測怎么用”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI