我試圖使用Physics2D.Raycast
來檢查玩家是否在地上(我知道還有其他方法來檢查玩家是否在地面上但我認爲raycast是最可靠的)。 問題在於,在我的場景中,它將球員本身作爲命中,我真的不明白爲什麼以及我該怎麼做。 我的代碼(在PlayerController
)如下:Unity Physics2D.Raycast總是返回「調用者」作爲命中
public bool IsGrounded() {
Bounds bounds = this.playerCollider.bounds;
Vector3 rayOrigin = bounds.center;
rayOrigin.y -= bounds.extents.y;
RaycastHit2D hit = Physics2D.Raycast (rayOrigin, Vector2.down, 0.1f);
if (hit.collider != null) {
Debug.Log ("Collider is: " + hit.collider.name);
}
return hit.collider != null;
}
我可以使用調試鑄造線:
Debug.DrawLine (rayOrigin, new Vector3 (rayOrigin.x, rayOrigin.y - 0.1f, rayOrigin.z), Color.magenta);
...它被鑄成預期,而Debug.Log
始終報告「球員「這本身,我不知道它是如何可能的。那麼,怎麼了?
ps。我正在使用Unity 5.3
感謝您的回答!我之前使用IsTouchingLayers()嘗試射線方法,因爲即使玩家在牆上跳躍,IsTouchingLayers()也會返回true(相反,偵測應該只發生在玩家精靈的底部,這就是爲什麼我選擇了raycast)試試重疊Circle(),但我擔心它可能會產生相同的不希望的效果:P無論如何,我不明白爲什麼默認情況下,raycast應該從對撞機本身開始......在對象內繪製光線有什麼意義? – daveoncode
我相信你也可以使用'Physics2D.RaycastAll'。結果按距離排序(儘管我不知道是上升還是下降)。 –
@GunnarB。是的你可以。我只用少量內存分配來發布少量解決方案。我的意思是,爲什麼分配內存與陣列,而你可以做光線播放和排除一些圖層?場景中的GameObject越多,'Physics2D.RaycastAll'分配的內存就越多。 – Programmer