2014-04-18 16 views
10

Ho cercato uno script di trascinamento di oggetti per Unity 2D. Ho trovato un buon metodo su Internet, ma sembra che funzioni solo in Unity 3D. Non va bene per me visto che sto realizzando un gioco 2D e non è in collisione con i "muri" in quel modo.Trascina oggetto in Unity 2D

Ho provato a riscriverlo in 2D, ma con Errori mi sono verificato degli errori.

Sarei molto felice se potessi aiutarmi a riscriverlo in 2D.

Ecco il codice ciò che funziona in 3D:

using UnityEngine; 
using System.Collections; 

[RequireComponent(typeof(BoxCollider))] 

public class Drag : MonoBehaviour { 
    private Vector3 screenPoint; 
    private Vector3 offset; 

void OnMouseDown() { 

    offset = gameObject.transform.position - Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z)); 
} 

void OnMouseDrag() 
{ 
    Vector3 curScreenPoint = new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z); 
    Vector3 curPosition = Camera.main.ScreenToWorldPoint(curScreenPoint) + offset; 
    transform.position = curPosition; 
} 
} 

risposta

8

Ci siamo quasi.

Modificare la linea RequireComponent nel codice per:

[RequireComponent(typeof(BoxCollider2D))] 

E aggiungere un componente BoxCollider2D per l'oggetto a cui si aggiunge lo script. L'ho appena testato e funziona perfettamente.

2

per quelli che hanno un problema con questo codice, ho rimosso screenPoint e sostituirlo con 10.0f(che è la distanza dell'oggetto dalla telecamera). Puoi usare qualsiasi cosa di cui hai bisogno. Ora funziona. Anche l'oggetto ha bisogno di un BoxCollider o CircleCollider per poter essere trascinato in giro. Quindi non ha senso usare [RequireComponent(typeof(BoxCollider2D))].

Il codice finale che ha funzionato bene per me è:

using UnityEngine; 
using System.Collections; 


public class DragDrop : MonoBehaviour { 

    private Vector3 offset; 

    void OnMouseDown() 
    { 

     offset = gameObject.transform.position - 
      Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, 10.0f)); 
    } 

    void OnMouseDrag() 
    { 
     Vector3 newPosition = new Vector3(Input.mousePosition.x, Input.mousePosition.y, 10.0f); 
     transform.position = Camera.main.ScreenToWorldPoint(newPosition) + offset; 
    } 
}