2016-12-16 62 views
0

我是一個完全統一的新手。我想做一個簡單的場景,你有三條生命,如果你碰到一個立方體,你就會失去生命。這是我的腳本:OnCollisionEnter統一不會調用函數

using UnityEngine; 
using UnityEngine.UI; 
using System.Collections; 

public class Lives : MonoBehaviour { 

public Transform player; 
public static int lives; 
public Image live1; 
public Image live2; 
public Image live3; 

// Use this for initialization 
void Start() { 
    lives = 3; 
    live1.enabled = true; 
    live2.enabled = true; 
    live3.enabled = true; 

} 

void Update() { 
    DisplayOfHearts(); 
} 

public static void Damage() { 
     lives -= 1; 
} 

public void OnCollisionEnter(Collision col) { 
    if (col.gameObject.tag == "cube") { 
     Lives.Damage(); 
    } 
} 

public void DisplayOfHearts() { 
    if (lives == 2) { 
     live3.enabled = false; 
    } 
    else if (lives == 1) { 
     live2.enabled = false; 
    } 
    else if (lives == 0) { 
     live1.enabled = false; 
    } 
} 

}

會發生什麼事是玩家無法通過立方體移動,但生命的還是保持三人。有什麼我失蹤?

+0

告訴我們關於遊戲對象 – Bijan

+0

立方體有一個箱子對撞機和一個剛體。 「Is Trigger」功能未打開。播放器(相機)有一個膠囊對撞機,其觸發功能也沒有打開。 – Robbebeest

+1

該文件表明,只有在其中一個碰撞體上還附加了非運動剛體時纔會發送_Collision事件。是這樣嗎? – Whatever

回答

1

問題是您已將腳本附加到錯誤的遊戲對象。腳本和對撞機必須連接到同一個遊戲對象。

MonoBehaviour腳本內部的Unity方法(例如OnEnable,Update,FixedUpdate,Awake,Start,OnTriggerEnter,OnCollisionStay等)僅適用於腳本附加到的遊戲對象。

如果您將腳本附加到另一個遊戲對象,請不要期望這些腳本中的任何一個能夠正常工作。 Update只適用於遊戲對象處於活動狀態。 OnCollisionEnter只有在碰撞發生在直接附加到該遊戲對象的對撞機上時才起作用。 (當小孩擁有對撞機而不是實際的遊戲對象時,它甚至不工作)