[英]Unity: Raycast Doesn't Work For The 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盒子對撞機,但光線似乎從未照射過塔。
Unity使用圖層系統,您可以過濾掉射線廣播正在使用的圖層。 您可以使用它來擊中特定的對撞機,並避免其他問題,例如瓷磚/塔樓問題。 語法(對於2d版本)為:
RaycastHit2D Raycast(Vector2 origin, Vector2 direction, float distance
= Mathf.Infinity, int layerMask = DefaultRaycastLayers, float minDepth
= -Mathf.Infinity, float maxDepth = Mathf.Infinity);
在這里,您可以看到layermask參數選擇與父對象所在的圖層不同的圖層。 然后使用檢查器中的下拉菜單將孩子放在不同的圖層上,如下所示。
您可以分別設置父級和子級游戲對象的層。
希望能有所幫助
經過一些研究,似乎將對象的所有子碰撞對象都視為父對象。 這樣,您就可以在較小的對撞機基礎上建立更復雜的對撞機,而這種情況通常是需要的。 仍然可以使用其transform屬性來引用確切的對撞機,例如:
if (hit.collider.transform != null)
{
//Execute code
}
這將專門針對兒童對撞機。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.