2016-12-16 1 views
0

Ich bin eine komplette Einheit Neuling. Ich möchte eine einfache Szene machen, in der du drei Leben hast und du verlierst ein Leben, wenn du mit einem Würfel kollidierst. Das ist mein Skript:OnCollisionEnter in Einheit wird keine Funktion

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; 
    } 
} 

}

Was passiert ist, kann der Spieler nicht durch den Würfel bewegen, aber die Menge des Lebens bleibt drei. Gibt es etwas, das mir fehlt?

+0

Erzähl uns von den Spielobjekten – Bijan

+0

Der Würfel hat einen Box Collider und einen starren Körper. Die Funktion "Ist Trigger" ist nicht aktiviert. Der Player (Kamera) hat einen Kapselcollider mit einer Triggerfunktion, die ebenfalls nicht eingeschaltet ist. – Robbebeest

+1

Die Dokumentation besagt, dass _Collision-Ereignisse nur gesendet werden, wenn einer der Collider auch einen nicht-kinematischen Starrkörper hat_. Ist das der Fall? – Whatever

Antwort

1

Das Problem ist, dass Sie das Skript an ein falsches Spielobjekt angehängt haben. Das Skript und der Collider müssen mit demselben Spielobjekt verknüpft sein.

Unity Methoden in einem MonoBehaviour Skript (wie OnEnable, Update, FixedUpdate, Wach auf, Start, OnTriggerEnter, OnCollisionStay, etc ..) nur für das Spielobjekt arbeiten, die das Skript angebracht ist.

Wenn Sie das Skript an ein anderes Spielobjekt anhängen, erwarten Sie nicht, dass eines davon funktioniert. Update funktioniert nur, während das Spielobjekt aktiv ist. OnCollisionEnter funktioniert nur, wenn eine Kollision auf ein Collider auftritt, der direkt an das Spielobjekt angefügt ist. (Es funktioniert nicht einmal, wenn ein Kind den Collider anstelle des eigentlichen Spielobjekts hat, an das das Skript angehängt ist)

Verwandte Themen