2013-11-25 102 views
1

我遇到了團結問題。 我正在努力讓它如此,如果敵人與玩家發生碰撞,玩家就會失去一個健康點。我的代碼是在C#中,它看起來像:與敵人碰撞造成傷害

在你看代碼之前,我想說的是敵人是剛體,所以對象子彈可以影響它們。我製作了一個額外的膠囊,作爲玩家身體的一部分,可以是一個剛體,以便代碼可以檢測碰撞。你認爲這會起作用嗎?我不確定剛體是否更容易檢測到另一個剛體碰撞或者它是否不在意。

//basic stuff// 

public class playerhealth : MonoBehaviour { 

    private int curHealth; 
    private int playerLives; 
    public GUIText winText; 
    public GUIText healthText; 
    public GUIText livesText; 

    void Start(){ 
    curHealth = 3; 
    playerLives = 3; 
    SetHealthText(); 
    SetLivesText(); 
      winText.text = ""; 
    } 


    void FixedUpdate()//where physics codes go 
    { 
      } 



//HERE'S WHERE THE COLLISIONS STUFF IS 

    void OnCollisionEnter(Collider rigidbody){ 
      if(rigidbody.gameObject.tag == "Enemy"){ 
        curHealth = curHealth - 1; 
        SetHealthText(); 
      } 

        if(rigidbody.gameObject.tag == "reloader"){ 
        playerLives = playerLives - 1; 
        SetLivesText(); 
      } 
    } 




//setting GUI TEXT and reloading level 

    void SetHealthText(){ 
      healthText.text = "Health Points: " + curHealth.ToString(); 
      if(curHealth <=0) { 
      Application.LoadLevel ("shootingworld"); 
        playerLives = playerLives - 1; 
      } 

      if(curHealth >= 10){ 
        playerLives+= 1; 
      } 

      } 

    void SetLivesText(){ 
      livesText.text = "Lives: " + playerLives.ToString(); 
      if (playerLives <= 0){ 
        winText.text = "GAME OVER"; 
      } 

    } 
} 
+0

能否請您解釋一下您遇到的問題。和場景 –

回答

1

你在這裏做了一些假設,其中一些是錯誤的。我會盡力指出。

將RigidBody添加到遊戲對象是正確的想法,但它是確定對象碰撞的形狀和大小的碰撞組件。考慮在兩者中添加BoxCollider,SphereCollider或CapsuleCollider。

我假設你無法讓對象實際發生碰撞,這可能是解決方案。

此外,

void OnCollisionEnter(Collider rigidbody){ 

  1. 你命名爲 '剛體' 的參數不能保證是一個剛體組件。據documentation

    的碰撞類包含有關聯絡點的信息,碰撞速度等

  2. OnCollisionEnter正確的語法有衝突的參數,而不是對撞機。
要訪問Collider上的剛體,您必須在Collider找到的對象上使用getcomponent,並檢查RigidBody組件是否存在。我不確定這是什麼,但應該檢查誤導性的參數名稱。

無論如何,你有正確的想法,通過標記比較對撞機的gameobject。您只需在編輯器中或通過代碼對對象執行標記即可。

0

您使用此:

void OnCollisionEnter(Collider collision) { 

}

撞機用於Ontrigger ...

試試這個:

void OnCollisionEnter(Collision collision) { 

}

希望這幫幫我!:)