[英]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.