2016-03-19 4 views
0

Ich habe eine eigene Funktion in einem Skript erstellt, die ausgeführt werden sollte, sobald eine Kollision auftritt (mit OnCollisionEnter).Eigene Funktion sollte jeden Frame ausführen, wie ist das möglich?

Die Idee wäre, die folgende:

Ich habe einen Ring, der durch die Taste der Tastatur (oben und unten) gelenkt wird. Dann habe ich einen Sinuswellenleiter mit Kugeln erzeugt, die sich von rechts nach links bewegen (sinusförmig). Der Spieler sollte den Ring nicht durch den Draht bewegen können.

Daher füge ich zwei Collider zum Ring (ein Up und ein Collider) und ein Kollisions-Skript.

Das Problem ist, dass manchmal der Ring mich durch den Draht bewegt werden kann ... wenn ich die Up-Taste die ganze Zeit drücken. Noch schlimmer, wenn ich nichts tue, dann sollte der Ring am Draht entlanggleiten ... aber das tut er nicht.

Ich denke, das Problem hängt damit zusammen, dass meine eigene Funktion nicht bei jedem Frame ausgeführt wird. Oder was denkst du? Wie kann ich in jedem Frame meine eigene Funktion ausführen?

Hier ist der Code des Kollisions Skript:

void OnCollisionEnter(Collision collUP) 
{ 
    if (collUP.gameObject.name == "Sphere(Clone)") { 

     Debug.Log ("Kollidiert mit UP"); 

     controller.MoveRingDown(); 

    } 

} 

Und hier der Code des Skripts Ring, in dem ich eine eigene Funktion erstellt:

public void MoveRingDown() { 

    transform.position = transform.position + new Vector3 (0f, -tilt, 0f); 

} 


public void MoveRingUp() { 

    transform.position = transform.position + new Vector3(0f, tilt, 0f); 

} 

Antwort

0

OnCollisionEnter nur einmal aufgerufen wird, wenn die Kollision produziert (wie sein Name liest). Ich denke, was Sie brauchen, ist OnCollisionStay, die ausgeführt wird, während die Kollision anhält.

Verwandte Themen