簡體   English   中英

Unity:Raycast不會擊中子對象的對撞機

[英]Unity: Raycast Doesn't Hit Child Object's Collider

我有一個基於圖塊的游戲。 我將塔放置為瓷磚的子對象。 我希望能夠通過光線投射來檢測鼠標在塔樓而非瓷磚上的點擊。 瓷磚和塔樓都具有2D盒子對撞機。 我可以檢測到瓷磚上的點擊,但是raycast不會檢測到塔上的點擊。 我怎么解決這個問題。 謝謝。

這是我的光線投射代碼:

if (Input.GetMouseButtonDown(0))
        {
            Ray ray = camera.ScreenPointToRay(Input.mousePosition);

            ray.origin = camera.transform.position;

            RaycastHit2D hit = Physics2D.Raycast(camera.transform.position, -Vector2.up, 50, 8);

            if (hit.collider != null && !EventSystem.current.IsPointerOverGameObject())
            {
                Debug.Log(hit.collider.transform.tag);
                //Transform objectHit = hit.transform;

            }
        }
    }

當我遮蓋瓷磚(此處為第8層)時,我什么也沒得到。 盡管塔(如瓷磚)也有一個2D盒子對撞機,但光線似乎從未照射過塔。

我建議使用3D射線代替2D射線。 也許Camera.screenPointToRay可能在手。 另外,我建議您先閱讀以下內容: https : //forum.unity3d.com/threads/unity-2d-raycast-from-mouse-to-screen.211708/

只是釣魚而已,但您的對撞機是否有可能藏在親本大腸菌中? 然后,Raycast將僅返回第一個匹配。 您可以按照此處記錄的方法嘗試RaycastAll

https://docs.unity3d.com/ScriptReference/Physics.RaycastAll.html

並循環瀏覽控制台中的所有命中項,以了解您是否真的在使用對撞機。

只是限制特定圖層的光線投射

//get the mask to raycast against either the player or enemy layer
 int layer_mask = LayerMask.GetMask("Player", "Enemy");
 //or this would be just player
 //int layer_mask = LayerMask.GetMask("Player");

 //or this would be player, enemy or cows!
 //int layer_mask = LayerMask.GetMask("Player","Enemy","Cows");

 //do the raycast specifying the mask
 if (Physics.Raycast (ray, out hit, distance, layer_mask))
 {

 } 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM