2016-04-05 8 views
0

Ich habe ein kleines Problem mit OnTriggerEnter, wenn ich mein Handy als Testgerät benutze. Ich habe einige Touch-Code, mit dem ich erfolgreich Objekte auf dem Bildschirm ziehen kann. Ich habe dann die Objekte mit anderen Objekten auf dem Bildschirm kollidieren.Unity 2D Kollisionen mit Prefabs funktioniert nicht am Telefon

Das funktionierte perfekt, bis ich die Objekte in Prefabs umwandelte. (Ich muss dies tun, da die Objekte zur Laufzeit zufällig generiert werden)

Jetzt kann ich noch die Objekte auf dem Bildschirm bewegen, aber sie kollidieren nicht mehr mit den anderen Objekten, die auch vorgefertigt sind. Es funktioniert jedoch immer noch gut, wenn es auf meinem Laptop im Unity-Editor ausgeführt wird.

Alle meine Objekte haben Collider auf sie mit Trigger überprüft, und die beweglichen Objekte haben starre Körper.

On Trigger Code eingeben

public void OnTriggerEnter(Collider other) 
{ 
    Debug.Log ("here"); 
    Debug.Log(this.gameObject.tag +"is this"); 
    Debug.Log(other.gameObject.tag + "is other"); 
    if (this.gameObject.tag == other.gameObject.tag) 
    { 
     Debug.Log("here2)"); 
     Reftomanager.miniGameScore++; 
     Reftomanager.updateScore(); 
     Destroy(this.gameObject); 
    } 
} 

Touch Code

if (Input.touchCount > 0) 
    { 


     Touch touch = Input.GetTouch(0); 

     switch(touch.phase) 
     { 

     case TouchPhase.Began: 
       Ray ray = Camera.main.ScreenPointToRay (touch.position); 

       if (Physics.Raycast(ray,out hit)) 
       { 
        thisObject = hit.collider.gameObject; 
        touchPos = Camera.main.ScreenToWorldPoint (touch.position); 
        if(thisObject.name!="circle") 
        { 
        draggingMode = true; 
        } 
       } 


       break; 

     case TouchPhase.Moved: 
      if (draggingMode) 
      { 
       touchPos = Camera.main.ScreenToWorldPoint (touch.position); 
       newCentre = touchPos; 
       thisObject.transform.position = touchPos; 
      } 
      break; 


     case TouchPhase.Ended: 

      draggingMode = false; 

     break; 
     } 
    } 


} 

ich völlig ratlos bin so jede mögliche Hilfe wäre erstaunlich.

Dank

Antwort

0

Da Ihr mit 3D-Beschleunigern ist es möglich, dass die Position, die Sie ihnen zuweisen anders ist? Touch.position ist ein Vector2, was bedeutet, ScreenToWorldPoint würde 0 für z verwenden. Wenn Sie einen Vector3 mit einem anderen z-Wert als 0 verwenden, um den Weltpunkt im Editor zu erhalten (Standalone-Eingabe), könnte dies zu einem anderen Wert führen, selbst wenn x und y identisch sind.

Eine andere Möglichkeit ist, dass ein plattformspezifischer Fehler irgendwo anders im Code auftritt, wenn das Objekt instanziiert wird. Dein Bewegungscode würde immer noch gut funktionieren, wenn es nicht im selben Monobehavior ist.

Wenn Sie ein Android-Gerät haben, können Sie Android Monitor mit dem Unity-Tag verwenden, um nach Fehlermeldungen zu suchen.

+0

Dank Robert, stellte sich heraus, dass der Z-Wert bei Instanziierung geändert wurde. Manuelles Zurückstellen auf 0 funktioniert :) –

+0

Ich bin froh zu hören, dass ich helfen konnte! :) – Allen