2017-03-27 62 views
0

首先統一C#的浮點值在我的代碼沒有減少對「OnCollisionEnter2d」

using UnityEngine; 
using System.Collections; 
public class Layer : MonoBehaviour { 

    public float health=150f; 
    void OnCollisionEnter2D(Collision2D beam){ 
     if (beam.gameObject.tag == "Box") { 
      Destroy (gameObject); 
     } 

     Projectile enemyship = beam.gameObject.GetComponent<Projectile>(); // Retrieving enemyship 
     if (enemyship) { 
      Destroy (gameObject); 
      health = health - 100f; // its value is decreasing only once 
      Debug.Log (health); 
      if (health < 0f || health == 0f) { 
       Destroy (enemyship.gameObject); // this line not executing 
      } 
     } 
    } 

} 

看看在我上面的代碼中的健康狀況下降只有一次,但OnCollisionEnter2D正常工作的價值。這意味着在第一次碰撞時,健康值減少100f,並變爲50f,但當它第二次碰撞時,其值仍然是50f。自從3小時後我一直在尋找這種解決方案。請幫我

我加了一點東西。當我按下空間時,我正在發射彈丸(激光)。所以當激光擊中兩次物體應該被破壞時

+5

'如果(enemyship){銷燬(遊戲對象);'你摧毀的對象與健康,那麼它不會再次襲來...... –

+0

* OnCollisionEnter2D工作正常」 - 你真的使用斷點來確認它嗎?聽起來好像事件處理程序只能觸發一次。 – CoolBots

+1

你還應該寫'if(health <0f || health == 0f)'作爲'if(health <= 0)' – DavidG

回答

0

好吧,所以你做錯的第一件事就是你的碰撞邏輯根本沒有意義。你的碰撞物體是「讓我們說一個凡人物品」它必須「死亡」只要它的健康狀況低於或等於0但每當它與標記爲Box的任何物品發生碰撞或者鍵入Projectile
要解決這個問題,請先根據這些條件降低健康狀況,然後檢查是否要銷燬該對象。

示例代碼:

public float health = 150f; 

void OnCollisionEnter2D(Collision2D beam) 
{ 
    float damage = 0f; // current damage... 
    if (beam.gameObject.tag == "Box") 
    { 
     // Destroy (gameObject); // do not destroy, just remove health 
     damage = health; // reduce health to 0 
    } 
    else 
    { 
     Projectile enemyship = beam.gameObject.GetComponent<Projectile>(); 
     if (enemyship) 
     { 
      // Destroy (gameObject); // again do not destroy.. just reduce health 
      damage = 100f; 
     } 
    } 

    health -= damage; 
    Debug.Log (health); // print your health 

    // check if dead 
    if (health < 0f || health == 0f) { 
     Destroy (gameObject); // this line not executing 
    } 
} 
+0

我自己解決了。但是,謝謝。我的邏輯是有道理的,但我必須減少另一個不屬於我的對象的健康。 –

+0

不健康=健康 - 100f但enemyship.health - = 100f。健康也是這個腳本所附的對象,並且由於它正在被破壞,它又被重新設置。感謝您的幫助 –