2016-11-03 12 views
3

私の2Dユニティゲームでは、スプライトをタッチ/カーソルの位置に移動しようとしています(今はマウスをクリックしています)。プレイヤーを正確なタッチ/マウスクリック位置に移動

スプライトの位置が(173、48、-52.1)です。 しかし、おそらく数ピクセル離れた場所をクリックすると、私の位置は(399,129、0)に変わり、私のスプライトは明らかに広大な未知数に投げ込まれます。

if (Input.GetMouseButtonDown(0)) 
{ 

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

EDIT

現在のコード

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

更新。 Apprantly、私が記録されている位置をクリックすると(スプライトが移動された位置)、カメラに直接になります。画像 Click

答えて

4

transform.positionは世界座標で表示されています。 Input.mousePositionは、ピクセル座標の値を返します。これを世界座標に変換する必要があります。

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

あなたの位置に割り当てることができます。

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

実際見直しで、これは完全に正しい動作しません。キャラクターはスクリーン上の特定の場所に移動します。私が触れた場所ではありません。 – Niana

+0

あなたの質問** "私のスプライトは明らかに広大な未知の世界に投げ込まれています" **これは、ワールド座標にピクセル座標を割り当てるためです。これは 'fingerPos = Input.mousePosition'です。あなたは私の答えのように世界座標に変換する必要があります。それがあなたのコードの問題です。 **これは完全には正しく機能しません**あなたはスプライトが消える問題を解決するはずです – Programmer

+0

私が画面をクリックするたびに、デバッグログに返された座標は正確に同じです。私のコード編集を見てください – Niana

関連する問題