在某些情況下,我試圖檢測碰撞,爆頭,而不是爆頭,錯過了目標。這是我嘗試實作它的方法:
private void OnCollisionEnter(Collision collision)
{
if (interations.won && interations.currentlyPickedUpObject == null)
{
if (collision.collider == head)
{
Debug.Log("HeadShot");
}
if (collision.collider == body || collision.collider == feet)
{
Debug.Log("Not a HeadShot");
}
else
{
Debug.Log("You've missed the target");
}
}
}
我面臨的問題是 if 和 else 都被執行了!不應該僅在不滿足 if 條件時才執行 else 塊嗎?為什么會這樣?只有當這兩個條件為假時,我才想執行 else 部分!
在此處輸入影像描述
uj5u.com熱心網友回復:
嘗試這個:
private bool hasCollided = false;
private void OnCollisionEnter(Collision collision)
{
if (interations.won && interations.currentlyPickedUpObject == null && !hasCollided)
{
hasCollided = true;
if (collision.collider == head)
{
Debug.Log("HeadShot");
}
if (collision.collider == body || collision.collider == feet)
{
Debug.Log("Not a HeadShot");
}
else
{
Debug.Log("You've missed the target");
}
}
}
uj5u.com熱心網友回復:
嘗試用 改變第二個if,else if像這樣
else if (collision.collider == body || collision.collider == feet)
在您的代碼中,else條件僅與第二個if條件相關聯,而不與第一個if.
uj5u.com熱心網友回復:
它們都被執行,因為你有兩個 if 陳述句。您的第一個 if 陳述句與 else 是分開的,而 else 又與第二個 if 相關聯。
想象對撞機是一個頭:你的第一個 if 將是真的。然后您轉到第二個 if - 對撞機既不是身體也不是腳,然后您轉到 else,因此您的代碼同時記錄HeadShot,并且您錯過了目標
為了防止這種情況,您可以使用else if:
if (collision.collider == head)
{
Debug.Log("HeadShot");
}
else if (collision.collider == body || collision.collider == feet)
{
Debug.Log("Not a HeadShot");
}
else
{
Debug.Log("You've missed the target");
}
因為它會阻止代碼選擇多個選項。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/521521.html
標籤:unity3d
上一篇:C#協程重復特定部分?
下一篇:vulnhub-DC1-學習記錄
