2017-11-07 1 views
0

Also habe ich 2 Spielobjekte Spieler und Puck. Immer wenn der Spieler den Puck berührt (kollidiert), möchte ich, dass der Puck an den Spieler hängt. Bis jetzt kann ich den Puck zum Spieler teleportieren, aber ich will das nicht. Ich möchte Puck an leeren Spielobjekt Faultier anhängen, die ich als Kind in meinen Player gelegt habe.Verknüpfe ein Spielobjekt mit einem anderen, wenn sie kollidieren

Here's my code

public class CollisionDetector : MonoBehaviour { 

    GameObject empty; //declare empty GameObject called "empty" 

    Vector3 pos; //declare empty Vector3 

    GameObject player; 

    public bool collided; 


    void Start() { 
     empty = GameObject.Find("holdSlot"); //Appends actual gameobject called "Empty" to our 'empty' variable we recently declared 
     player = GameObject.Find("Player"); //Appends actual gameobject called "Player" to our 'player' variable we recently declared 
     collided = false; 
     pos = empty.transform.position; //ettii holdSlotin paikan ja laittaa sen "pos" nimelle 

    } 


    void OnCollisionEnter(Collision col) { 

     if (col.gameObject.tag == "Player") 
     { 
      //Do something on collide 
      //transform.position = pos; 
      collided = true; 
     } 
    } 

    void Update() { 

     if (collided == true) 
     { 
      transform.position = pos; 
     } 


    } 


} 
+0

Sie können ein GameOjbect nicht an ein anderes GameObject anhängen. Sie hängen Skripte an GameObjects an. Was meinst du mit anhängen? – Programmer

+0

Können Sie nicht einfach Ihr Objekt bei Kollision zu einem 'leeren' Kind machen und die lokale Position auf' Vector3.zero' setzen? – Hellium

+0

Ich mache ein Hockeyspiel. Also möchte ich, dass mein Puck meinen Player anbringt, wenn der Spieler ihn berührt. –

Antwort

0

einfach den Puck ein Kind des Spielers machen, dass so, wie es sich um folgen.

void OnCollisionEnter(Collision col) 
{ 
    if (col.gameObject.tag == "Player") 
    { 
     transform.SetParent(col.gameObject.transform, true); 
    } 
} 

Der true Wert auf Parameter worldPositionStays stellt sicher, dass die Pucks aktuelle Welt Position gehalten wird, während seine Eltern auf das Spielerobjekt geändert werden.

Alternativ, wenn Sie den Puck wollen auf eine Standardposition zu springen, zum Beispiel direkt vor dem Spieler, können Sie tun:

void OnCollisionEnter(Collision col) 
{ 
    if (col.gameObject.tag == "Player") 
    { 
     transform.SetParent(col.gameObject.transform, false); 
     transform.localPosition = SomeDefaultPositionInPlayersLocalSpace; 
    } 
} 

Beachten Sie, dass beide Lösungen nicht benötigen Sie das Update Position des Pucks während des Updates.

Sobald Sie den Puck schießen und ihn vom Player lösen möchten, tun Sie einfach transform.SetParent(null, true); und bewegen Sie ihn dann frei herum.

+0

okay, ich tat wie du gesagt hast und benutzte das genaue Skript, das du geschrieben hast. Der Stand-Puck bewegt sich nicht, wenn der Spieler ihn berührt. IDK was ist falsch oder was mache ich falsch? Spieler-Objekt ist als "Spieler" markiert und sowohl Puck als auch Spieler haben Collider-Komponenten auf ihnen. Puck hat keinen starren Körper, aber sollte das Problem hier nicht verursachen. Das Skript wurde auch auf meinem "Player" -Objekt angehängt. und löschte die Update-Methode. –

+0

Haben Sie während des Tests das, was Sie in Ihrem Update tun, entfernt? –

+0

ja nur das bekam in einem Skript an "Puck" Leere OnCollisionEnter (Collision col) { if (col.gameObject.tag == "Player") { transform.SetParent (col.gameObject.transform, true) ; } } –

Verwandte Themen