2016-11-03 3 views
3

In meinem 2D-Einheitsspiel versuche ich, mein Sprite an den Ort meiner Berührung/des Cursors zu bewegen (momentan ist es ein Mausklick).Verschiebe den Spieler zum genauen Touch-/Mausklick-Ort

Mein Sprite ist an der Stelle (173, 48, -52.1). Wenn ich jedoch auf einen Ort klicke, der wahrscheinlich ein paar Pixel entfernt ist, wird meine Position in (399, 129, 0) geändert und mein Sprite wird scheinbar in das große Unbekannte geschleudert.

if (Input.GetMouseButtonDown(0)) 
{ 

    //fingerPos = Input.GetTouch(0).position; 
    fingerPos = Input.mousePosition; 
    transform.position = fingerPos; 
    Debug.Log(transform.position); 
} 

EDIT

Aktuelle Code

if (Input.GetMouseButtonDown (0)) { 
     fingerPos = Camera.main.ScreenToWorldPoint(Input.mousePosition); //Desktop 
     transform.position = fingerPos; 
     Debug.Log (transform.position); 
    } 

aktualisieren. Apperquent, wenn ich auf die Position klicke, die aufgenommen wird (und die, in die das Sprite bewegt wird), ist direkt auf der Kamera. Siehe Bild Click

Antwort

4

transform.position ist in Weltkoordinaten. Input.mousePosition gibt Werte in Pixelkoordinaten zurück. Sie müssen dies in Weltkoordinaten umwandeln.

fingerPos = Camera.main.ScreenToWorldPoint(Input.GetTouch(0).position); //Mobile 
fingerPos = Camera.main.ScreenToWorldPoint(Input.mousePosition); //Desktop 

Dann können Sie es Ihrer Position zuweisen.

transform.position = fingerPos; 

EDIT:

if (Input.GetMouseButtonDown(0)) 
{ 
    fingerPos = Input.mousePosition; 
    fingerPos.z = 10; 
    fingerPos = Camera.main.ScreenToWorldPoint(fingerPos); 

    transform.position = fingerPos; 
    Debug.Log(transform.position); 
} 
+0

Eigentlich in Reviewing, das funktioniert nicht ganz korrekt. Der Charakter wird an eine bestimmte Stelle auf dem Bildschirm bewegt. Nicht dort, wo ich mich berührte. – Niana

+0

Ihre Frage ** "mein Sprite wird anscheinend in das große Unbekannte geschleudert" ** Das liegt daran, dass Sie die Pixelkoordinate der Weltkoordinate mit 'fingerPos = Input.mousePosition' zuweisen. Sie müssen es in Weltkoordinaten konvertieren, wie ich es in meiner Antwort getan habe. Das ist das Problem mit deinem Code. ** das funktioniert nicht ganz korrekt "** Sie sind nicht einmal genau, was nicht funktioniert. Das sollte das Problem des Sprites verschwinden. – Programmer

+0

Wo ich auf den Bildschirm klicke, werden mir die Koordinaten im Debug Log angezeigt Genau das. – Niana

Verwandte Themen